home *** CD-ROM | disk | FTP | other *** search
MacBinary | 2002-08-08 | 19.0 KB | [□□□□/□□□□] |
open in:
MacOS 8.1
|
Win98
|
DOS
browse contents |
view JSON data
|
view as text
This file was processed as: MacBinary
(archive/macBinary).
Confidence | Program | Detection | Match Type | Support
|
---|
66%
| dexvert
| Ultima 6 (music/ultima6)
| ext
| Supported |
10%
| dexvert
| Jesper Olsen Module (music/jesperOlsen)
| magic
| Supported |
1%
| dexvert
| PC-98 Music (music/pc98Music)
| ext
| Unsupported |
1%
| dexvert
| Amiga E Module (other/amigaEModule)
| ext
| Unsupported |
1%
| dexvert
| ECX module (other/ecxModule)
| ext
| Unsupported |
1%
| dexvert
| Maple Common Binary (other/mapleCommonBinary)
| ext
| Unsupported |
1%
| dexvert
| MacBinary (archive/macBinary)
| fallback
| Supported |
100%
| file
| MacBinary II, inited, Thu Aug 8 17:19:35 2002, modified Thu Aug 8 17:19:35 2002, 18843 bytes "SMTP.m" , at 0x4a1b 286 bytes resource
| default (weak)
| |
99%
| file
| data
| default
| |
66%
| TrID
| TTComp archive compressed (bin-4K)
| default (weak)
| |
33%
| TrID
| MacBinary 2
| default (weak)
| |
100%
| dearkID
| deark: macbinary
| default
| |
100%
| siegfried
| fmt/1762 MacBinary (II)
| default
| |
100%
| lsar
| MacBinary
| default
|
|
id metadata |
---|
key | value |
---|
macFileType | [□□□□] |
macFileCreator | [□□□□] |
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 06 53 4d 54 50 2e 6d | 00 00 00 00 00 00 00 00 |..SMTP.m|........|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 00 00 00 00 00 00 00 | 00 01 00 00 00 00 00 00 |........|........|
|00000050| 00 00 00 00 00 49 9b 00 | 00 01 1e b9 78 90 e7 b9 |.....I..|....x...|
|00000060| 78 90 e7 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |x.......|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 d6 e3 00 00 |........|........|
|00000080| 2f 2a 0a 2a 2a 20 20 53 | 4d 54 50 2e 6d 0a 2a 2a |/*.** S|MTP.m.**|
|00000090| 0a 2a 2a 20 20 43 6f 70 | 79 72 69 67 68 74 20 28 |.** Cop|yright (|
|000000a0| 63 29 20 32 30 30 31 2c | 20 32 30 30 32 0a 2a 2a |c) 2001,| 2002.**|
|000000b0| 0a 2a 2a 20 20 41 75 74 | 68 6f 72 3a 20 4c 75 64 |.** Aut|hor: Lud|
|000000c0| 6f 76 69 63 20 4d 61 72 | 63 6f 74 74 65 20 3c 6c |ovic Mar|cotte <l|
|000000d0| 75 64 6f 76 69 63 40 53 | 6f 70 68 6f 73 2e 63 61 |udovic@S|ophos.ca|
|000000e0| 3e 0a 2a 2a 0a 2a 2a 20 | 20 54 68 69 73 20 6c 69 |>.**.** | This li|
|000000f0| 62 72 61 72 79 20 69 73 | 20 66 72 65 65 20 73 6f |brary is| free so|
|00000100| 66 74 77 61 72 65 3b 20 | 79 6f 75 20 63 61 6e 20 |ftware; |you can |
|00000110| 72 65 64 69 73 74 72 69 | 62 75 74 65 20 69 74 20 |redistri|bute it |
|00000120| 61 6e 64 2f 6f 72 0a 2a | 2a 20 20 6d 6f 64 69 66 |and/or.*|* modif|
|00000130| 79 20 69 74 20 75 6e 64 | 65 72 20 74 68 65 20 74 |y it und|er the t|
|00000140| 65 72 6d 73 20 6f 66 20 | 74 68 65 20 47 4e 55 20 |erms of |the GNU |
|00000150| 4c 65 73 73 65 72 20 47 | 65 6e 65 72 61 6c 20 50 |Lesser G|eneral P|
|00000160| 75 62 6c 69 63 0a 2a 2a | 20 20 4c 69 63 65 6e 73 |ublic.**| Licens|
|00000170| 65 20 61 73 20 70 75 62 | 6c 69 73 68 65 64 20 62 |e as pub|lished b|
|00000180| 79 20 74 68 65 20 46 72 | 65 65 20 53 6f 66 74 77 |y the Fr|ee Softw|
|00000190| 61 72 65 20 46 6f 75 6e | 64 61 74 69 6f 6e 3b 20 |are Foun|dation; |
|000001a0| 65 69 74 68 65 72 0a 2a | 2a 20 20 76 65 72 73 69 |either.*|* versi|
|000001b0| 6f 6e 20 32 2e 31 20 6f | 66 20 74 68 65 20 4c 69 |on 2.1 o|f the Li|
|000001c0| 63 65 6e 73 65 2c 20 6f | 72 20 28 61 74 20 79 6f |cense, o|r (at yo|
|000001d0| 75 72 20 6f 70 74 69 6f | 6e 29 20 61 6e 79 20 6c |ur optio|n) any l|
|000001e0| 61 74 65 72 20 76 65 72 | 73 69 6f 6e 2e 0a 2a 2a |ater ver|sion..**|
|000001f0| 20 20 0a 2a 2a 20 20 54 | 68 69 73 20 6c 69 62 72 | .** T|his libr|
|00000200| 61 72 79 20 69 73 20 64 | 69 73 74 72 69 62 75 74 |ary is d|istribut|
|00000210| 65 64 20 69 6e 20 74 68 | 65 20 68 6f 70 65 20 74 |ed in th|e hope t|
|00000220| 68 61 74 20 69 74 20 77 | 69 6c 6c 20 62 65 20 75 |hat it w|ill be u|
|00000230| 73 65 66 75 6c 2c 0a 2a | 2a 20 20 62 75 74 20 57 |seful,.*|* but W|
|00000240| 49 54 48 4f 55 54 20 41 | 4e 59 20 57 41 52 52 41 |ITHOUT A|NY WARRA|
|00000250| 4e 54 59 3b 20 77 69 74 | 68 6f 75 74 20 65 76 65 |NTY; wit|hout eve|
|00000260| 6e 20 74 68 65 20 69 6d | 70 6c 69 65 64 20 77 61 |n the im|plied wa|
|00000270| 72 72 61 6e 74 79 20 6f | 66 0a 2a 2a 20 20 4d 45 |rranty o|f.** ME|
|00000280| 52 43 48 41 4e 54 41 42 | 49 4c 49 54 59 20 6f 72 |RCHANTAB|ILITY or|
|00000290| 20 46 49 54 4e 45 53 53 | 20 46 4f 52 20 41 20 50 | FITNESS| FOR A P|
|000002a0| 41 52 54 49 43 55 4c 41 | 52 20 50 55 52 50 4f 53 |ARTICULA|R PURPOS|
|000002b0| 45 2e 20 53 65 65 20 74 | 68 65 20 47 4e 55 0a 2a |E. See t|he GNU.*|
|000002c0| 2a 20 20 4c 65 73 73 65 | 72 20 47 65 6e 65 72 61 |* Lesse|r Genera|
|000002d0| 6c 20 50 75 62 6c 69 63 | 20 4c 69 63 65 6e 73 65 |l Public| License|
|000002e0| 20 66 6f 72 20 6d 6f 72 | 65 20 64 65 74 61 69 6c | for mor|e detail|
|000002f0| 73 2e 0a 2a 2a 20 20 0a | 2a 2a 20 20 59 6f 75 20 |s..** .|** You |
|00000300| 73 68 6f 75 6c 64 20 68 | 61 76 65 20 72 65 63 65 |should h|ave rece|
|00000310| 69 76 65 64 20 61 20 63 | 6f 70 79 20 6f 66 20 74 |ived a c|opy of t|
|00000320| 68 65 20 47 4e 55 20 4c | 65 73 73 65 72 20 47 65 |he GNU L|esser Ge|
|00000330| 6e 65 72 61 6c 20 50 75 | 62 6c 69 63 0a 2a 2a 20 |neral Pu|blic.** |
|00000340| 20 4c 69 63 65 6e 73 65 | 20 61 6c 6f 6e 67 20 77 | License| along w|
|00000350| 69 74 68 20 74 68 69 73 | 20 6c 69 62 72 61 72 79 |ith this| library|
|00000360| 3b 20 69 66 20 6e 6f 74 | 2c 20 77 72 69 74 65 20 |; if not|, write |
|00000370| 74 6f 20 74 68 65 20 46 | 72 65 65 20 53 6f 66 74 |to the F|ree Soft|
|00000380| 77 61 72 65 0a 2a 2a 20 | 20 46 6f 75 6e 64 61 74 |ware.** | Foundat|
|00000390| 69 6f 6e 2c 20 49 6e 63 | 2e 2c 20 35 39 20 54 65 |ion, Inc|., 59 Te|
|000003a0| 6d 70 6c 65 20 50 6c 61 | 63 65 2c 20 53 75 69 74 |mple Pla|ce, Suit|
|000003b0| 65 20 33 33 30 2c 20 42 | 6f 73 74 6f 6e 2c 20 4d |e 330, B|oston, M|
|000003c0| 41 20 30 32 31 31 31 2d | 31 33 30 37 20 55 53 41 |A 02111-|1307 USA|
|000003d0| 0a 2a 2f 0a 0a 23 69 6d | 70 6f 72 74 20 3c 50 61 |.*/..#im|port <Pa|
|000003e0| 6e 74 6f 6d 69 6d 65 2f | 53 4d 54 50 2e 68 3e 0a |ntomime/|SMTP.h>.|
|000003f0| 0a 23 69 6d 70 6f 72 74 | 20 3c 50 61 6e 74 6f 6d |.#import| <Pantom|
|00000400| 69 6d 65 2f 43 6f 6e 6e | 65 63 74 69 6f 6e 2e 68 |ime/Conn|ection.h|
|00000410| 3e 0a 23 69 6d 70 6f 72 | 74 20 3c 50 61 6e 74 6f |>.#impor|t <Panto|
|00000420| 6d 69 6d 65 2f 43 6f 6e | 73 74 61 6e 74 73 2e 68 |mime/Con|stants.h|
|00000430| 3e 0a 23 69 6d 70 6f 72 | 74 20 3c 50 61 6e 74 6f |>.#impor|t <Panto|
|00000440| 6d 69 6d 65 2f 47 53 4d | 44 35 2e 68 3e 0a 23 69 |mime/GSM|D5.h>.#i|
|00000450| 6d 70 6f 72 74 20 3c 50 | 61 6e 74 6f 6d 69 6d 65 |mport <P|antomime|
|00000460| 2f 4d 65 73 73 61 67 65 | 2e 68 3e 0a 23 69 6d 70 |/Message|.h>.#imp|
|00000470| 6f 72 74 20 3c 50 61 6e | 74 6f 6d 69 6d 65 2f 4e |ort <Pan|tomime/N|
|00000480| 53 44 61 74 61 45 78 74 | 65 6e 73 69 6f 6e 73 2e |SDataExt|ensions.|
|00000490| 68 3e 0a 23 69 6d 70 6f | 72 74 20 3c 50 61 6e 74 |h>.#impo|rt <Pant|
|000004a0| 6f 6d 69 6d 65 2f 54 43 | 50 43 6f 6e 6e 65 63 74 |omime/TC|PConnect|
|000004b0| 69 6f 6e 2e 68 3e 0a 0a | 23 64 65 66 69 6e 65 20 |ion.h>..|#define |
|000004c0| 43 52 20 27 5c 72 27 0a | 23 75 6e 64 65 66 20 4c |CR '\r'.|#undef L|
|000004d0| 46 0a 23 64 65 66 69 6e | 65 20 4c 46 20 27 5c 6e |F.#defin|e LF '\n|
|000004e0| 27 0a 0a 40 69 6d 70 6c | 65 6d 65 6e 74 61 74 69 |'..@impl|ementati|
|000004f0| 6f 6e 20 53 4d 54 50 0a | 0a 2f 2f 0a 2f 2f 0a 2f |on SMTP.|.//.//./|
|00000500| 2f 0a 2d 20 28 69 64 29 | 20 69 6e 69 74 57 69 74 |/.- (id)| initWit|
|00000510| 68 4e 61 6d 65 3a 20 28 | 4e 53 53 74 72 69 6e 67 |hName: (|NSString|
|00000520| 20 2a 29 20 74 68 65 4e | 61 6d 65 0a 20 20 20 20 | *) theN|ame. |
|00000530| 20 20 20 20 20 20 20 20 | 20 20 20 70 6f 72 74 3a | | port:|
|00000540| 20 28 69 6e 74 29 20 74 | 68 65 50 6f 72 74 0a 7b | (int) t|hePort.{|
|00000550| 0a 20 20 53 4d 54 50 52 | 65 73 70 6f 6e 73 65 4c |. SMTPR|esponseL|
|00000560| 69 6e 65 73 20 2a 73 6d | 74 70 52 65 73 70 6f 6e |ines *sm|tpRespon|
|00000570| 73 65 3b 0a 0a 20 20 73 | 65 6c 66 20 3d 20 5b 73 |se;.. s|elf = [s|
|00000580| 75 70 65 72 20 69 6e 69 | 74 5d 3b 0a 0a 20 20 73 |uper ini|t];.. s|
|00000590| 6d 74 70 52 65 73 70 6f | 6e 73 65 20 3d 20 5b 5b |mtpRespo|nse = [[|
|000005a0| 53 4d 54 50 52 65 73 70 | 6f 6e 73 65 4c 69 6e 65 |SMTPResp|onseLine|
|000005b0| 73 20 61 6c 6c 6f 63 5d | 20 69 6e 69 74 5d 3b 0a |s alloc]| init];.|
|000005c0| 0a 20 20 73 75 70 70 6f | 72 74 65 64 41 75 74 68 |. suppo|rtedAuth|
|000005d0| 65 6e 74 69 63 61 74 69 | 6f 6e 4d 65 63 68 61 6e |enticati|onMechan|
|000005e0| 69 73 6d 73 20 3d 20 5b | 5b 4e 53 4d 75 74 61 62 |isms = [|[NSMutab|
|000005f0| 6c 65 41 72 72 61 79 20 | 61 6c 6c 6f 63 5d 20 69 |leArray |alloc] i|
|00000600| 6e 69 74 5d 3b 0a 20 20 | 75 73 65 72 6e 61 6d 65 |nit];. |username|
|00000610| 20 3d 20 6e 69 6c 3b 0a | 20 20 0a 20 20 5b 73 65 | = nil;.| . [se|
|00000620| 6c 66 20 73 65 74 4e 61 | 6d 65 3a 20 74 68 65 4e |lf setNa|me: theN|
|00000630| 61 6d 65 5d 3b 0a 20 20 | 5b 73 65 6c 66 20 73 65 |ame];. |[self se|
|00000640| 74 50 6f 72 74 3a 20 74 | 68 65 50 6f 72 74 5d 3b |tPort: t|hePort];|
|00000650| 0a 0a 20 20 74 63 70 43 | 6f 6e 6e 65 63 74 69 6f |.. tcpC|onnectio|
|00000660| 6e 20 3d 20 5b 5b 54 43 | 50 43 6f 6e 6e 65 63 74 |n = [[TC|PConnect|
|00000670| 69 6f 6e 20 61 6c 6c 6f | 63 5d 20 69 6e 69 74 57 |ion allo|c] initW|
|00000680| 69 74 68 4e 61 6d 65 3a | 20 5b 73 65 6c 66 20 6e |ithName:| [self n|
|00000690| 61 6d 65 5d 0a 09 09 09 | 09 09 20 70 6f 72 74 3a |ame]....|.. port:|
|000006a0| 20 74 68 65 50 6f 72 74 | 5d 3b 0a 0a 20 20 6d 61 | thePort|];.. ma|
|000006b0| 78 53 69 7a 65 41 6c 6c | 6f 77 65 64 42 79 53 65 |xSizeAll|owedBySe|
|000006c0| 72 76 65 72 20 3d 20 30 | 3b 0a 0a 20 20 69 66 20 |rver = 0|;.. if |
|000006d0| 28 20 21 74 63 70 43 6f | 6e 6e 65 63 74 69 6f 6e |( !tcpCo|nnection|
|000006e0| 20 29 0a 20 20 20 20 7b | 0a 20 20 20 20 20 20 41 | ). {|. A|
|000006f0| 55 54 4f 52 45 4c 45 41 | 53 45 28 73 65 6c 66 29 |UTORELEA|SE(self)|
|00000700| 3b 0a 20 20 20 20 20 20 | 72 65 74 75 72 6e 20 6e |;. |return n|
|00000710| 69 6c 3b 0a 20 20 20 20 | 7d 0a 20 20 0a 20 20 69 |il;. |}. . i|
|00000720| 66 20 28 20 21 5b 73 65 | 6c 66 20 5f 72 65 73 70 |f ( ![se|lf _resp|
|00000730| 6f 6e 73 65 46 72 6f 6d | 53 65 72 76 65 72 49 73 |onseFrom|ServerIs|
|00000740| 45 71 75 61 6c 54 6f 43 | 6f 64 65 3a 20 40 22 32 |EqualToC|ode: @"2|
|00000750| 32 30 22 5d 20 29 0a 20 | 20 20 20 7b 0a 20 20 20 |20"] ). | {. |
|00000760| 20 20 20 52 45 4c 45 41 | 53 45 28 73 6d 74 70 52 | RELEA|SE(smtpR|
|00000770| 65 73 70 6f 6e 73 65 29 | 3b 0a 20 20 20 20 20 20 |esponse)|;. |
|00000780| 41 55 54 4f 52 45 4c 45 | 41 53 45 28 73 65 6c 66 |AUTORELE|ASE(self|
|00000790| 29 3b 0a 20 20 20 20 20 | 20 72 65 74 75 72 6e 20 |);. | return |
|000007a0| 6e 69 6c 3b 0a 20 20 20 | 20 7d 0a 20 20 0a 20 20 |nil;. | }. . |
|000007b0| 5b 5b 73 65 6c 66 20 74 | 63 70 43 6f 6e 6e 65 63 |[[self t|cpConnec|
|000007c0| 74 69 6f 6e 5d 20 77 72 | 69 74 65 4c 69 6e 65 3a |tion] wr|iteLine:|
|000007d0| 20 40 22 45 48 4c 4f 20 | 6c 6f 63 61 6c 68 6f 73 | @"EHLO |localhos|
|000007e0| 74 2e 6c 6f 63 61 6c 64 | 6f 6d 61 69 6e 22 5d 3b |t.locald|omain"];|
|000007f0| 0a 20 20 0a 20 20 69 66 | 20 28 20 21 5b 73 65 6c |. . if| ( ![sel|
|00000800| 66 20 5f 72 65 73 70 6f | 6e 73 65 46 72 6f 6d 53 |f _respo|nseFromS|
|00000810| 65 72 76 65 72 49 73 45 | 71 75 61 6c 54 6f 43 6f |erverIsE|qualToCo|
|00000820| 64 65 3a 20 40 22 32 35 | 30 22 0a 09 20 20 20 20 |de: @"25|0".. |
|00000830| 20 20 73 61 76 65 52 65 | 73 70 6f 6e 73 65 49 6e | saveRe|sponseIn|
|00000840| 3a 20 73 6d 74 70 52 65 | 73 70 6f 6e 73 65 5d 20 |: smtpRe|sponse] |
|00000850| 29 0a 20 20 20 20 7b 0a | 20 20 20 20 20 20 4e 53 |). {.| NS|
|00000860| 44 65 62 75 67 4c 6f 67 | 28 40 22 53 4d 54 50 3a |DebugLog|(@"SMTP:|
|00000870| 20 54 68 65 20 73 65 72 | 76 65 72 20 64 6f 65 73 | The ser|ver does|
|00000880| 6e 27 74 20 73 75 70 70 | 6f 72 74 20 74 68 65 20 |n't supp|ort the |
|00000890| 65 78 74 65 6e 64 65 64 | 20 53 4d 54 50 20 73 65 |extended| SMTP se|
|000008a0| 72 76 69 63 65 2e 22 29 | 3b 0a 20 20 20 20 20 20 |rvice.")|;. |
|000008b0| 5b 5b 73 65 6c 66 20 74 | 63 70 43 6f 6e 6e 65 63 |[[self t|cpConnec|
|000008c0| 74 69 6f 6e 5d 20 77 72 | 69 74 65 4c 69 6e 65 3a |tion] wr|iteLine:|
|000008d0| 20 40 22 48 45 4c 4f 20 | 6c 6f 63 61 6c 68 6f 73 | @"HELO |localhos|
|000008e0| 74 2e 6c 6f 63 61 6c 64 | 6f 6d 61 69 6e 22 5d 3b |t.locald|omain"];|
|000008f0| 0a 20 20 20 20 20 20 0a | 20 20 20 20 20 20 69 66 |. .| if|
|00000900| 20 28 20 21 5b 73 65 6c | 66 20 5f 72 65 73 70 6f | ( ![sel|f _respo|
|00000910| 6e 73 65 46 72 6f 6d 53 | 65 72 76 65 72 49 73 45 |nseFromS|erverIsE|
|00000920| 71 75 61 6c 54 6f 43 6f | 64 65 3a 20 40 22 32 35 |qualToCo|de: @"25|
|00000930| 30 22 5d 20 29 0a 09 7b | 0a 09 20 20 52 45 4c 45 |0"] )..{|.. RELE|
|00000940| 41 53 45 28 73 6d 74 70 | 52 65 73 70 6f 6e 73 65 |ASE(smtp|Response|
|00000950| 29 3b 0a 09 20 20 41 55 | 54 4f 52 45 4c 45 41 53 |);.. AU|TORELEAS|
|00000960| 45 28 73 65 6c 66 29 3b | 0a 09 20 20 72 65 74 75 |E(self);|.. retu|
|00000970| 72 6e 20 6e 69 6c 3b 0a | 09 7d 0a 20 20 20 20 7d |rn nil;.|.}. }|
|00000980| 0a 20 20 65 6c 73 65 20 | 69 66 20 28 20 73 6d 74 |. else |if ( smt|
|00000990| 70 52 65 73 70 6f 6e 73 | 65 20 29 0a 20 20 20 20 |pRespons|e ). |
|000009a0| 7b 0a 20 20 20 20 20 20 | 2f 2f 20 57 65 20 61 6e |{. |// We an|
|000009b0| 61 6c 79 7a 65 20 74 68 | 65 20 6c 69 6e 65 73 0a |alyze th|e lines.|
|000009c0| 20 20 20 20 20 20 75 6e | 73 69 67 6e 65 64 20 69 | un|signed i|
|000009d0| 6e 74 20 69 3b 0a 20 20 | 20 20 20 20 0a 20 20 20 |nt i;. | . |
|000009e0| 20 20 20 66 6f 72 20 28 | 20 69 20 3d 20 30 3b 20 | for (| i = 0; |
|000009f0| 69 20 3c 20 5b 73 6d 74 | 70 52 65 73 70 6f 6e 73 |i < [smt|pRespons|
|00000a00| 65 20 63 6f 75 6e 74 5d | 3b 20 69 2b 2b 20 29 0a |e count]|; i++ ).|
|00000a10| 09 7b 0a 09 20 20 2f 2f | 20 44 65 63 6f 64 65 20 |.{.. //| Decode |
|00000a20| 61 75 74 68 65 6e 74 69 | 63 61 74 69 6f 6e 20 6d |authenti|cation m|
|00000a30| 65 63 68 61 6e 69 73 6d | 0a 09 20 20 5b 73 65 6c |echanism|.. [sel|
|00000a40| 66 20 5f 64 65 63 6f 64 | 65 53 75 70 70 6f 72 74 |f _decod|eSupport|
|00000a50| 65 64 41 75 74 68 65 6e | 74 69 63 61 74 69 6f 6e |edAuthen|tication|
|00000a60| 4d 65 63 68 61 6e 69 73 | 6d 46 72 6f 6d 53 74 72 |Mechanis|mFromStr|
|00000a70| 69 6e 67 3a 20 5b 73 6d | 74 70 52 65 73 70 6f 6e |ing: [sm|tpRespon|
|00000a80| 73 65 20 6c 69 6e 65 41 | 74 49 6e 64 65 78 3a 20 |se lineA|tIndex: |
|00000a90| 69 5d 5d 3b 0a 09 20 20 | 0a 09 20 20 2f 2f 20 52 |i]];.. |.. // R|
|00000aa0| 46 43 31 38 37 30 3a 20 | 4d 65 73 73 61 67 65 20 |FC1870: |Message |
|00000ab0| 53 69 7a 65 20 44 65 63 | 6c 61 72 61 74 69 6f 6e |Size Dec|laration|
|00000ac0| 0a 09 20 20 5b 73 65 6c | 66 20 5f 64 65 63 6f 64 |.. [sel|f _decod|
|00000ad0| 65 4d 61 78 53 69 7a 65 | 41 6c 6c 6f 77 65 64 46 |eMaxSize|AllowedF|
|00000ae0| 72 6f 6d 53 74 72 69 6e | 67 3a 20 5b 73 6d 74 70 |romStrin|g: [smtp|
|00000af0| 52 65 73 70 6f 6e 73 65 | 20 6c 69 6e 65 41 74 49 |Response| lineAtI|
|00000b00| 6e 64 65 78 3a 20 69 5d | 5d 3b 0a 09 7d 0a 20 20 |ndex: i]|];..}. |
|00000b10| 20 20 7d 0a 0a 20 20 52 | 45 4c 45 41 53 45 28 73 | }.. R|ELEASE(s|
|00000b20| 6d 74 70 52 65 73 70 6f | 6e 73 65 29 3b 0a 0a 20 |mtpRespo|nse);.. |
|00000b30| 20 72 65 74 75 72 6e 20 | 73 65 6c 66 3b 0a 7d 0a | return |self;.}.|
|00000b40| 0a 0a 2f 2f 0a 2f 2f 0a | 2f 2f 0a 2d 20 28 69 64 |..//.//.|//.- (id|
|00000b50| 29 20 69 6e 69 74 57 69 | 74 68 4e 61 6d 65 3a 20 |) initWi|thName: |
|00000b60| 28 4e 53 53 74 72 69 6e | 67 20 2a 29 20 74 68 65 |(NSStrin|g *) the|
|00000b70| 4e 61 6d 65 0a 7b 0a 20 | 20 72 65 74 75 72 6e 20 |Name.{. | return |
|00000b80| 5b 73 65 6c 66 20 69 6e | 69 74 57 69 74 68 4e 61 |[self in|itWithNa|
|00000b90| 6d 65 3a 20 74 68 65 4e | 61 6d 65 0a 09 20 20 20 |me: theN|ame.. |
|00000ba0| 20 20 20 20 70 6f 72 74 | 3a 20 32 35 5d 3b 0a 7d | port|: 25];.}|
|00000bb0| 0a 0a 0a 2f 2f 0a 2f 2f | 0a 2f 2f 0a 2d 20 28 69 |...//.//|.//.- (i|
|00000bc0| 64 29 20 69 6e 69 74 53 | 53 4c 57 69 74 68 4e 61 |d) initS|SLWithNa|
|00000bd0| 6d 65 3a 20 28 4e 53 53 | 74 72 69 6e 67 20 2a 29 |me: (NSS|tring *)|
|00000be0| 20 74 68 65 4e 61 6d 65 | 0a 09 09 20 20 70 6f 72 | theName|... por|
|00000bf0| 74 3a 20 28 69 6e 74 29 | 20 74 68 65 50 6f 72 74 |t: (int)| thePort|
|00000c00| 0a 7b 0a 20 20 4e 53 44 | 65 62 75 67 4c 6f 67 28 |.{. NSD|ebugLog(|
|00000c10| 40 22 53 4d 54 50 3a 20 | 2d 69 6e 69 74 53 53 4c |@"SMTP: |-initSSL|
|00000c20| 57 69 74 68 4e 61 6d 65 | 3a 20 70 6f 72 74 3a 20 |WithName|: port: |
|00000c30| 6e 6f 74 20 69 6d 70 6c | 65 6d 65 6e 74 65 64 2e |not impl|emented.|
|00000c40| 20 44 65 66 61 75 6c 74 | 69 6e 67 20 74 6f 20 69 | Default|ing to i|
|00000c50| 6e 73 65 63 75 72 65 20 | 6d 6f 64 65 2e 22 29 3b |nsecure |mode.");|
|00000c60| 0a 20 20 0a 20 20 72 65 | 74 75 72 6e 20 5b 73 65 |. . re|turn [se|
|00000c70| 6c 66 20 69 6e 69 74 57 | 69 74 68 4e 61 6d 65 3a |lf initW|ithName:|
|00000c80| 20 74 68 65 4e 61 6d 65 | 0a 09 20 20 20 20 20 20 | theName|.. |
|00000c90| 20 70 6f 72 74 3a 20 74 | 68 65 50 6f 72 74 5d 3b | port: t|hePort];|
|00000ca0| 0a 7d 0a 0a 2f 2f 0a 2f | 2f 0a 2f 2f 0a 2d 20 28 |.}..//./|/.//.- (|
|00000cb0| 76 6f 69 64 29 20 64 65 | 61 6c 6c 6f 63 0a 7b 0a |void) de|alloc.{.|
|00000cc0| 20 20 52 45 4c 45 41 53 | 45 28 73 75 70 70 6f 72 | RELEAS|E(suppor|
|00000cd0| 74 65 64 41 75 74 68 65 | 6e 74 69 63 61 74 69 6f |tedAuthe|nticatio|
|00000ce0| 6e 4d 65 63 68 61 6e 69 | 73 6d 73 29 3b 0a 20 20 |nMechani|sms);. |
|00000cf0| 52 45 4c 45 41 53 45 28 | 6e 61 6d 65 29 3b 0a 20 |RELEASE(|name);. |
|00000d00| 20 0a 20 20 54 45 53 54 | 5f 52 45 4c 45 41 53 45 | . TEST|_RELEASE|
|00000d10| 28 75 73 65 72 6e 61 6d | 65 29 3b 0a 0a 20 20 54 |(usernam|e);.. T|
|00000d20| 45 53 54 5f 52 45 4c 45 | 41 53 45 28 28 69 64 3c |EST_RELE|ASE((id<|
|00000d30| 4e 53 4f 62 6a 65 63 74 | 3e 29 74 63 70 43 6f 6e |NSObject|>)tcpCon|
|00000d40| 6e 65 63 74 69 6f 6e 29 | 3b 0a 20 20 0a 20 20 5b |nection)|;. . [|
|00000d50| 73 75 70 65 72 20 64 65 | 61 6c 6c 6f 63 5d 3b 0a |super de|alloc];.|
|00000d60| 7d 0a 0a 0a 2f 2f 0a 2f | 2f 0a 2f 2f 0a 2d 20 28 |}...//./|/.//.- (|
|00000d70| 42 4f 4f 4c 29 20 61 75 | 74 68 65 6e 74 69 63 61 |BOOL) au|thentica|
|00000d80| 74 65 57 69 74 68 55 73 | 65 72 6e 61 6d 65 3a 20 |teWithUs|ername: |
|00000d90| 28 4e 53 53 74 72 69 6e | 67 20 2a 29 20 74 68 65 |(NSStrin|g *) the|
|00000da0| 55 73 65 72 6e 61 6d 65 | 0a 20 20 20 20 20 20 20 |Username|. |
|00000db0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000dc0| 20 20 70 61 73 73 77 6f | 72 64 3a 20 28 4e 53 53 | passwo|rd: (NSS|
|00000dd0| 74 72 69 6e 67 20 2a 29 | 20 74 68 65 50 61 73 73 |tring *)| thePass|
|00000de0| 77 6f 72 64 0a 7b 0a 20 | 20 72 65 74 75 72 6e 20 |word.{. | return |
|00000df0| 5b 73 65 6c 66 20 61 75 | 74 68 65 6e 74 69 63 61 |[self au|thentica|
|00000e00| 74 65 57 69 74 68 55 73 | 65 72 6e 61 6d 65 3a 20 |teWithUs|ername: |
|00000e10| 74 68 65 55 73 65 72 6e | 61 6d 65 0a 09 20 20 20 |theUsern|ame.. |
|00000e20| 20 20 20 20 70 61 73 73 | 77 6f 72 64 3a 20 74 68 | pass|word: th|
|00000e30| 65 50 61 73 73 77 6f 72 | 64 0a 09 20 20 20 20 20 |ePasswor|d.. |
|00000e40| 20 20 6d 65 63 68 61 6e | 69 73 6d 3a 20 6e 69 6c | mechan|ism: nil|
|00000e50| 5d 3b 0a 7d 0a 0a 2f 2f | 0a 2f 2f 20 54 68 69 73 |];.}..//|.// This|
|00000e60| 20 6d 65 74 68 6f 64 20 | 69 73 20 75 73 65 64 20 | method |is used |
|00000e70| 74 6f 20 61 75 74 68 65 | 6e 74 69 63 61 74 65 20 |to authe|nticate |
|00000e80| 6f 75 72 73 65 6c 66 20 | 74 6f 20 74 68 65 20 53 |ourself |to the S|
|00000e90| 4d 54 50 20 73 65 72 76 | 65 72 2e 0a 2f 2f 0a 2d |MTP serv|er..//.-|
|00000ea0| 20 28 42 4f 4f 4c 29 20 | 61 75 74 68 65 6e 74 69 | (BOOL) |authenti|
|00000eb0| 63 61 74 65 57 69 74 68 | 55 73 65 72 6e 61 6d 65 |cateWith|Username|
|00000ec0| 3a 20 28 4e 53 53 74 72 | 69 6e 67 20 2a 29 20 74 |: (NSStr|ing *) t|
|00000ed0| 68 65 55 73 65 72 6e 61 | 6d 65 0a 20 20 20 20 20 |heUserna|me. |
|00000ee0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000ef0| 20 20 20 20 70 61 73 73 | 77 6f 72 64 3a 20 28 4e | pass|word: (N|
|00000f00| 53 53 74 72 69 6e 67 20 | 2a 29 20 74 68 65 50 61 |SString |*) thePa|
|00000f10| 73 73 77 6f 72 64 0a 09 | 09 09 6d 65 63 68 61 6e |ssword..|..mechan|
|00000f20| 69 73 6d 3a 20 28 4e 53 | 53 74 72 69 6e 67 20 2a |ism: (NS|String *|
|00000f30| 29 20 74 68 65 4d 65 63 | 68 61 6e 69 73 6d 0a 7b |) theMec|hanism.{|
|00000f40| 0a 20 20 2f 2f 20 57 65 | 20 66 69 72 73 74 20 72 |. // We| first r|
|00000f50| 65 74 61 69 6e 20 74 68 | 65 20 75 73 65 72 6e 61 |etain th|e userna|
|00000f60| 6d 65 20 66 6f 72 20 66 | 75 74 75 72 65 20 75 73 |me for f|uture us|
|00000f70| 65 0a 20 20 75 73 65 72 | 6e 61 6d 65 20 3d 20 52 |e. user|name = R|
|00000f80| 45 54 41 49 4e 28 74 68 | 65 55 73 65 72 6e 61 6d |ETAIN(th|eUsernam|
|00000f90| 65 29 3b 0a 0a 20 20 2f | 2f 20 49 66 20 74 68 65 |e);.. /|/ If the|
|00000fa0| 20 6d 65 63 68 61 6e 69 | 73 6d 20 69 73 20 6e 69 | mechani|sm is ni|
|00000fb0| 6c 2c 20 77 65 20 67 6f | 20 66 72 6f 6d 20 74 68 |l, we go| from th|
|00000fc0| 65 20 27 62 65 73 74 27 | 20 6f 6e 65 20 74 6f 20 |e 'best'| one to |
|00000fd0| 74 68 65 20 27 77 6f 72 | 73 74 27 20 6f 6e 65 0a |the 'wor|st' one.|
|00000fe0| 20 20 69 66 20 28 20 21 | 74 68 65 4d 65 63 68 61 | if ( !|theMecha|
|00000ff0| 6e 69 73 6d 20 29 0a 20 | 20 20 20 7b 0a 20 20 20 |nism ). | {. |
|00001000| 20 20 20 4e 53 44 65 62 | 75 67 4c 6f 67 28 40 22 | NSDeb|ugLog(@"|
|00001010| 53 4d 54 50 20 61 75 74 | 68 65 6e 74 69 63 61 74 |SMTP aut|henticat|
|00001020| 69 6f 6e 20 6d 65 63 68 | 61 6e 69 73 6d 20 69 73 |ion mech|anism is|
|00001030| 20 6e 69 6c 20 2d 20 46 | 49 58 4d 45 21 22 29 3b | nil - F|IXME!");|
|00001040| 0a 20 20 20 20 7d 0a 20 | 20 65 6c 73 65 20 69 66 |. }. | else if|
|00001050| 20 28 20 5b 74 68 65 4d | 65 63 68 61 6e 69 73 6d | ( [theM|echanism|
|00001060| 20 63 61 73 65 49 6e 73 | 65 6e 73 69 74 69 76 65 | caseIns|ensitive|
|00001070| 43 6f 6d 70 61 72 65 3a | 20 40 22 50 4c 41 49 4e |Compare:| @"PLAIN|
|00001080| 22 5d 20 3d 3d 20 4e 53 | 4f 72 64 65 72 65 64 53 |"] == NS|OrderedS|
|00001090| 61 6d 65 20 29 0a 20 20 | 20 20 7b 0a 20 20 20 20 |ame ). | {. |
|000010a0| 20 20 72 65 74 75 72 6e | 20 5b 73 65 6c 66 20 5f | return| [self _|
|000010b0| 70 6c 61 69 6e 41 75 74 | 68 65 6e 74 69 63 61 74 |plainAut|henticat|
|000010c0| 69 6f 6e 55 73 69 6e 67 | 55 73 65 72 6e 61 6d 65 |ionUsing|Username|
|000010d0| 3a 20 74 68 65 55 73 65 | 72 6e 61 6d 65 0a 09 09 |: theUse|rname...|
|000010e0| 20 20 20 70 61 73 73 77 | 6f 72 64 3a 20 74 68 65 | passw|ord: the|
|000010f0| 50 61 73 73 77 6f 72 64 | 5d 3b 0a 20 20 20 20 7d |Password|];. }|
|00001100| 0a 20 20 65 6c 73 65 20 | 69 66 20 28 20 5b 74 68 |. else |if ( [th|
|00001110| 65 4d 65 63 68 61 6e 69 | 73 6d 20 63 61 73 65 49 |eMechani|sm caseI|
|00001120| 6e 73 65 6e 73 69 74 69 | 76 65 43 6f 6d 70 61 72 |nsensiti|veCompar|
|00001130| 65 3a 20 40 22 4c 4f 47 | 49 4e 22 5d 20 3d 3d 20 |e: @"LOG|IN"] == |
|00001140| 4e 53 4f 72 64 65 72 65 | 64 53 61 6d 65 20 29 0a |NSOrdere|dSame ).|
|00001150| 20 20 20 20 7b 0a 20 20 | 20 20 20 20 72 65 74 75 | {. | retu|
|00001160| 72 6e 20 5b 73 65 6c 66 | 20 5f 6c 6f 67 69 6e 41 |rn [self| _loginA|
|00001170| 75 74 68 65 6e 74 69 63 | 61 74 69 6f 6e 55 73 69 |uthentic|ationUsi|
|00001180| 6e 67 55 73 65 72 6e 61 | 6d 65 3a 20 74 68 65 55 |ngUserna|me: theU|
|00001190| 73 65 72 6e 61 6d 65 0a | 09 09 20 20 20 70 61 73 |sername.|.. pas|
|000011a0| 73 77 6f 72 64 3a 20 74 | 68 65 50 61 73 73 77 6f |sword: t|hePasswo|
|000011b0| 72 64 5d 3b 0a 20 20 20 | 20 7d 0a 20 20 65 6c 73 |rd];. | }. els|
|000011c0| 65 20 69 66 20 28 20 5b | 74 68 65 4d 65 63 68 61 |e if ( [|theMecha|
|000011d0| 6e 69 73 6d 20 63 61 73 | 65 49 6e 73 65 6e 73 69 |nism cas|eInsensi|
|000011e0| 74 69 76 65 43 6f 6d 70 | 61 72 65 3a 20 40 22 43 |tiveComp|are: @"C|
|000011f0| 52 41 4d 2d 4d 44 35 22 | 5d 20 3d 3d 20 4e 53 4f |RAM-MD5"|] == NSO|
|00001200| 72 64 65 72 65 64 53 61 | 6d 65 20 29 0a 20 20 20 |rderedSa|me ). |
|00001210| 20 7b 0a 20 20 20 20 20 | 20 72 65 74 75 72 6e 20 | {. | return |
|00001220| 5b 73 65 6c 66 20 5f 63 | 72 61 6d 4d 44 35 41 75 |[self _c|ramMD5Au|
|00001230| 74 68 65 6e 74 69 63 61 | 74 69 6f 6e 55 73 69 6e |thentica|tionUsin|
|00001240| 67 55 73 65 72 6e 61 6d | 65 3a 20 74 68 65 55 73 |gUsernam|e: theUs|
|00001250| 65 72 6e 61 6d 65 0a 09 | 09 20 20 20 70 61 73 73 |ername..|. pass|
|00001260| 77 6f 72 64 3a 20 74 68 | 65 50 61 73 73 77 6f 72 |word: th|ePasswor|
|00001270| 64 5d 3b 0a 20 20 20 20 | 7d 0a 20 20 0a 20 20 4e |d];. |}. . N|
|00001280| 53 44 65 62 75 67 4c 6f | 67 28 40 22 55 6e 73 75 |SDebugLo|g(@"Unsu|
|00001290| 70 70 6f 72 74 65 64 20 | 53 4d 54 50 20 61 75 74 |pported |SMTP aut|
|000012a0| 68 65 6e 74 69 63 61 74 | 69 6f 6e 20 6d 65 74 68 |henticat|ion meth|
|000012b0| 6f 64 2e 22 29 3b 0a 20 | 20 0a 20 20 72 65 74 75 |od.");. | . retu|
|000012c0| 72 6e 20 4e 4f 3b 0a 7d | 09 09 20 20 0a 0a 2f 2f |rn NO;.}|.. ..//|
|000012d0| 0a 2f 2f 0a 2f 2f 0a 2d | 20 28 4e 53 53 74 72 69 |.//.//.-| (NSStri|
|000012e0| 6e 67 20 2a 29 20 6e 61 | 6d 65 0a 7b 0a 20 20 72 |ng *) na|me.{. r|
|000012f0| 65 74 75 72 6e 20 6e 61 | 6d 65 3b 0a 7d 0a 0a 0a |eturn na|me;.}...|
|00001300| 2f 2f 0a 2f 2f 0a 2f 2f | 0a 2d 20 28 76 6f 69 64 |//.//.//|.- (void|
|00001310| 29 20 73 65 74 4e 61 6d | 65 3a 20 28 4e 53 53 74 |) setNam|e: (NSSt|
|00001320| 72 69 6e 67 20 2a 29 20 | 74 68 65 4e 61 6d 65 0a |ring *) |theName.|
|00001330| 7b 0a 20 20 52 45 54 41 | 49 4e 28 74 68 65 4e 61 |{. RETA|IN(theNa|
|00001340| 6d 65 29 3b 0a 20 20 52 | 45 4c 45 41 53 45 28 6e |me);. R|ELEASE(n|
|00001350| 61 6d 65 29 3b 0a 20 20 | 6e 61 6d 65 20 3d 20 74 |ame);. |name = t|
|00001360| 68 65 4e 61 6d 65 3b 0a | 7d 0a 0a 0a 2d 20 28 69 |heName;.|}...- (i|
|00001370| 6e 74 29 20 70 6f 72 74 | 0a 7b 0a 20 20 72 65 74 |nt) port|.{. ret|
|00001380| 75 72 6e 20 70 6f 72 74 | 3b 0a 7d 0a 0a 2d 20 28 |urn port|;.}..- (|
|00001390| 76 6f 69 64 29 20 73 65 | 74 50 6f 72 74 3a 20 28 |void) se|tPort: (|
|000013a0| 69 6e 74 29 20 74 68 65 | 50 6f 72 74 0a 7b 0a 20 |int) the|Port.{. |
|000013b0| 20 70 6f 72 74 20 3d 20 | 74 68 65 50 6f 72 74 3b | port = |thePort;|
|000013c0| 0a 7d 0a 0a 2f 2f 0a 2f | 2f 0a 2f 2f 0a 2d 20 28 |.}..//./|/.//.- (|
|000013d0| 69 64 3c 43 6f 6e 6e 65 | 63 74 69 6f 6e 3e 29 20 |id<Conne|ction>) |
|000013e0| 74 63 70 43 6f 6e 6e 65 | 63 74 69 6f 6e 0a 7b 0a |tcpConne|ction.{.|
|000013f0| 20 20 72 65 74 75 72 6e | 20 74 63 70 43 6f 6e 6e | return| tcpConn|
|00001400| 65 63 74 69 6f 6e 3b 0a | 7d 0a 0a 0a 2f 2f 0a 2f |ection;.|}...//./|
|00001410| 2f 0a 2f 2f 0a 2d 20 28 | 4e 53 53 74 72 69 6e 67 |/.//.- (|NSString|
|00001420| 20 2a 29 20 75 73 65 72 | 6e 61 6d 65 0a 7b 0a 20 | *) user|name.{. |
|00001430| 20 72 65 74 75 72 6e 20 | 75 73 65 72 6e 61 6d 65 | return |username|
|00001440| 3b 0a 7d 0a 0a 2f 2f 0a | 2f 2f 0a 2f 2f 0a 2d 20 |;.}..//.|//.//.- |
|00001450| 28 42 4f 4f 4c 29 20 73 | 65 6e 64 4d 65 73 73 61 |(BOOL) s|endMessa|
|00001460| 67 65 3a 20 28 4d 65 73 | 73 61 67 65 20 2a 29 20 |ge: (Mes|sage *) |
|00001470| 74 68 65 4d 65 73 73 61 | 67 65 0a 7b 0a 20 20 72 |theMessa|ge.{. r|
|00001480| 65 74 75 72 6e 20 5b 73 | 65 6c 66 20 5f 73 65 6e |eturn [s|elf _sen|
|00001490| 64 4d 65 73 73 61 67 65 | 3a 20 74 68 65 4d 65 73 |dMessage|: theMes|
|000014a0| 73 61 67 65 0a 09 20 20 | 20 20 20 20 20 77 69 74 |sage.. | wit|
|000014b0| 68 52 61 77 53 6f 75 72 | 63 65 3a 20 5b 74 68 65 |hRawSour|ce: [the|
|000014c0| 4d 65 73 73 61 67 65 20 | 64 61 74 61 55 73 69 6e |Message |dataUsin|
|000014d0| 67 53 65 6e 64 69 6e 67 | 4d 6f 64 65 3a 20 53 45 |gSending|Mode: SE|
|000014e0| 4e 44 5f 55 53 49 4e 47 | 5f 53 4d 54 50 5d 5d 3b |ND_USING|_SMTP]];|
|000014f0| 0a 7d 0a 0a 0a 2f 2f 0a | 2f 2f 20 54 68 65 20 6d |.}...//.|// The m|
|00001500| 65 73 73 61 67 65 20 72 | 65 63 65 69 76 65 64 20 |essage r|eceived |
|00001510| 68 61 73 20 5c 6e 20 66 | 6f 72 20 65 61 63 68 20 |has \n f|or each |
|00001520| 6c 69 6e 65 73 2c 20 77 | 65 20 6d 75 73 74 20 70 |lines, w|e must p|
|00001530| 75 74 20 5c 72 5c 6e 20 | 0a 2f 2f 20 61 74 20 74 |ut \r\n |.// at t|
|00001540| 68 65 20 65 6e 64 20 6f | 66 20 65 61 63 68 20 6c |he end o|f each l|
|00001550| 69 6e 65 20 69 6e 73 74 | 65 61 64 2e 0a 2f 2f 0a |ine inst|ead..//.|
|00001560| 2d 20 28 42 4f 4f 4c 29 | 20 73 65 6e 64 4d 65 73 |- (BOOL)| sendMes|
|00001570| 73 61 67 65 46 72 6f 6d | 52 61 77 53 6f 75 72 63 |sageFrom|RawSourc|
|00001580| 65 3a 20 28 4e 53 44 61 | 74 61 20 2a 29 20 74 68 |e: (NSDa|ta *) th|
|00001590| 65 44 61 74 61 0a 7b 0a | 20 20 4d 65 73 73 61 67 |eData.{.| Messag|
|000015a0| 65 20 2a 61 4d 65 73 73 | 61 67 65 3b 0a 20 20 42 |e *aMess|age;. B|
|000015b0| 4f 4f 4c 20 61 42 4f 4f | 4c 3b 0a 0a 20 20 61 4d |OOL aBOO|L;.. aM|
|000015c0| 65 73 73 61 67 65 20 3d | 20 5b 5b 4d 65 73 73 61 |essage =| [[Messa|
|000015d0| 67 65 20 61 6c 6c 6f 63 | 5d 20 69 6e 69 74 57 69 |ge alloc|] initWi|
|000015e0| 74 68 44 61 74 61 3a 20 | 74 68 65 44 61 74 61 5d |thData: |theData]|
|000015f0| 3b 0a 0a 20 20 2f 2f 20 | 46 49 58 4d 45 0a 20 20 |;.. // |FIXME. |
|00001600| 2f 2f 20 57 65 20 6d 75 | 73 74 20 62 65 20 63 61 |// We mu|st be ca|
|00001610| 72 65 66 75 6c 20 61 62 | 6f 75 74 20 5c 6e 20 2d |reful ab|out \n -|
|00001620| 3e 20 5c 72 5c 6e 2e 2e | 20 57 65 20 73 68 6f 75 |> \r\n..| We shou|
|00001630| 6c 64 20 64 6f 20 6d 6f | 72 65 20 74 65 73 74 69 |ld do mo|re testi|
|00001640| 6e 67 0a 20 20 2f 2f 20 | 77 69 74 68 20 76 61 72 |ng. // |with var|
|00001650| 69 6f 75 73 20 53 4d 54 | 50 20 73 65 72 76 65 72 |ious SMT|P server|
|00001660| 2e 0a 20 20 61 42 4f 4f | 4c 20 3d 20 5b 73 65 6c |.. aBOO|L = [sel|
|00001670| 66 20 5f 73 65 6e 64 4d | 65 73 73 61 67 65 3a 20 |f _sendM|essage: |
|00001680| 61 4d 65 73 73 61 67 65 | 20 0a 09 09 77 69 74 68 |aMessage| ...with|
|00001690| 52 61 77 53 6f 75 72 63 | 65 3a 20 74 68 65 44 61 |RawSourc|e: theDa|
|000016a0| 74 61 5d 3b 0a 0a 20 20 | 44 45 53 54 52 4f 59 28 |ta];.. |DESTROY(|
|000016b0| 61 4d 65 73 73 61 67 65 | 29 3b 0a 20 20 0a 20 20 |aMessage|);. . |
|000016c0| 72 65 74 75 72 6e 20 61 | 42 4f 4f 4c 3b 0a 7d 0a |return a|BOOL;.}.|
|000016d0| 0a 0a 2f 2f 0a 2f 2f 0a | 2f 2f 0a 2d 20 28 76 6f |..//.//.|//.- (vo|
|000016e0| 69 64 29 20 63 6c 6f 73 | 65 0a 7b 0a 20 20 5b 5b |id) clos|e.{. [[|
|000016f0| 73 65 6c 66 20 74 63 70 | 43 6f 6e 6e 65 63 74 69 |self tcp|Connecti|
|00001700| 6f 6e 5d 20 77 72 69 74 | 65 4c 69 6e 65 3a 20 40 |on] writ|eLine: @|
|00001710| 22 51 55 49 54 22 5d 3b | 0a 20 20 0a 20 20 69 66 |"QUIT"];|. . if|
|00001720| 20 28 20 21 5b 73 65 6c | 66 20 5f 72 65 73 70 6f | ( ![sel|f _respo|
|00001730| 6e 73 65 46 72 6f 6d 53 | 65 72 76 65 72 49 73 45 |nseFromS|erverIsE|
|00001740| 71 75 61 6c 54 6f 43 6f | 64 65 3a 20 40 22 32 32 |qualToCo|de: @"22|
|00001750| 31 22 5d 20 29 0a 20 20 | 20 20 7b 0a 20 20 20 20 |1"] ). | {. |
|00001760| 20 20 4e 53 44 65 62 75 | 67 4c 6f 67 28 40 22 53 | NSDebu|gLog(@"S|
|00001770| 4d 54 50 3a 20 41 6e 20 | 65 72 72 6f 72 20 6f 63 |MTP: An |error oc|
|00001780| 63 75 72 65 64 20 77 68 | 69 6c 65 20 65 6e 64 69 |cured wh|ile endi|
|00001790| 6e 67 20 74 68 65 20 63 | 6f 6e 6e 65 63 74 69 6f |ng the c|onnectio|
|000017a0| 6e 20 77 69 74 68 20 74 | 68 65 20 53 4d 54 50 20 |n with t|he SMTP |
|000017b0| 73 65 72 76 65 72 2e 22 | 29 3b 0a 20 20 20 20 20 |server."|);. |
|000017c0| 20 5b 5b 73 65 6c 66 20 | 74 63 70 43 6f 6e 6e 65 | [[self |tcpConne|
|000017d0| 63 74 69 6f 6e 5d 20 63 | 6c 6f 73 65 5d 3b 0a 20 |ction] c|lose];. |
|000017e0| 20 20 20 7d 0a 7d 0a 0a | 0a 2f 2f 0a 2f 2f 0a 2f | }.}..|.//.//./|
|000017f0| 2f 0a 2d 20 28 4e 53 41 | 72 72 61 79 20 2a 29 20 |/.- (NSA|rray *) |
|00001800| 73 75 70 70 6f 72 74 65 | 64 41 75 74 68 65 6e 74 |supporte|dAuthent|
|00001810| 69 63 61 74 69 6f 6e 4d | 65 63 68 61 6e 69 73 6d |icationM|echanism|
|00001820| 73 0a 7b 0a 20 20 72 65 | 74 75 72 6e 20 5b 4e 53 |s.{. re|turn [NS|
|00001830| 41 72 72 61 79 20 61 72 | 72 61 79 57 69 74 68 41 |Array ar|rayWithA|
|00001840| 72 72 61 79 3a 20 73 75 | 70 70 6f 72 74 65 64 41 |rray: su|pportedA|
|00001850| 75 74 68 65 6e 74 69 63 | 61 74 69 6f 6e 4d 65 63 |uthentic|ationMec|
|00001860| 68 61 6e 69 73 6d 73 5d | 3b 0a 7d 0a 0a 40 65 6e |hanisms]|;.}..@en|
|00001870| 64 0a 0a 0a 2f 2f 0a 2f | 2f 20 50 72 69 76 61 74 |d...//./|/ Privat|
|00001880| 65 20 6d 65 74 68 6f 64 | 73 0a 2f 2f 0a 40 69 6d |e method|s.//.@im|
|00001890| 70 6c 65 6d 65 6e 74 61 | 74 69 6f 6e 20 53 4d 54 |plementa|tion SMT|
|000018a0| 50 20 28 50 72 69 76 61 | 74 65 29 0a 0a 0a 2f 2f |P (Priva|te)...//|
|000018b0| 0a 2f 2f 20 54 68 69 73 | 20 6d 65 74 68 6f 64 20 |.// This| method |
|000018c0| 72 65 63 65 69 76 65 73 | 20 61 20 73 74 72 69 6e |receives| a strin|
|000018d0| 67 20 6c 69 6b 65 3a 20 | 41 55 54 48 20 50 4c 41 |g like: |AUTH PLA|
|000018e0| 49 4e 20 4c 4f 47 49 4e | 0a 2f 2f 20 20 20 20 20 |IN LOGIN|.// |
|000018f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001900| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001910| 41 55 54 48 3d 50 4c 41 | 49 4e 20 4c 4f 47 49 4e |AUTH=PLA|IN LOGIN|
|00001920| 20 58 2d 4e 45 54 53 43 | 41 50 45 2d 48 41 53 2d | X-NETSC|APE-HAS-|
|00001930| 42 55 47 53 0a 2f 2f 20 | 49 74 20 64 65 63 6f 64 |BUGS.// |It decod|
|00001940| 65 20 74 68 65 20 73 74 | 72 69 6e 67 20 74 6f 20 |e the st|ring to |
|00001950| 62 75 69 6c 64 20 61 20 | 6c 69 73 74 20 6f 66 20 |build a |list of |
|00001960| 73 75 70 70 6f 72 74 65 | 64 20 61 75 74 68 65 6e |supporte|d authen|
|00001970| 74 69 63 61 74 69 6f 6e | 20 6d 65 63 68 61 6e 69 |tication| mechani|
|00001980| 73 6d 73 2e 0a 2f 2f 0a | 2d 20 28 76 6f 69 64 29 |sms..//.|- (void)|
|00001990| 20 5f 64 65 63 6f 64 65 | 53 75 70 70 6f 72 74 65 | _decode|Supporte|
|000019a0| 64 41 75 74 68 65 6e 74 | 69 63 61 74 69 6f 6e 4d |dAuthent|icationM|
|000019b0| 65 63 68 61 6e 69 73 6d | 46 72 6f 6d 53 74 72 69 |echanism|FromStri|
|000019c0| 6e 67 3a 20 28 4e 53 53 | 74 72 69 6e 67 20 2a 29 |ng: (NSS|tring *)|
|000019d0| 20 74 68 65 53 74 72 69 | 6e 67 0a 7b 0a 20 20 4e | theStri|ng.{. N|
|000019e0| 53 52 61 6e 67 65 20 61 | 52 61 6e 67 65 3b 0a 20 |SRange a|Range;. |
|000019f0| 20 0a 20 20 2f 2f 20 49 | 66 20 77 65 20 61 6c 72 | . // I|f we alr|
|00001a00| 65 61 64 79 20 68 61 76 | 65 20 65 6c 65 6d 65 6e |eady hav|e elemen|
|00001a10| 74 73 20 69 6e 20 6f 75 | 72 20 73 75 70 70 6f 72 |ts in ou|r suppor|
|00001a20| 74 65 64 41 75 74 68 65 | 6e 74 69 63 61 74 69 6f |tedAuthe|nticatio|
|00001a30| 6e 4d 65 63 68 61 6e 69 | 73 6d 73 2c 20 74 68 61 |nMechani|sms, tha|
|00001a40| 74 20 6d 65 61 6e 73 0a | 20 20 2f 2f 20 77 65 20 |t means.| // we |
|00001a50| 61 6c 72 65 61 64 79 20 | 64 65 63 6f 64 65 64 20 |already |decoded |
|00001a60| 61 6e 20 41 55 54 48 20 | 70 61 72 61 6d 65 74 65 |an AUTH |paramete|
|00001a70| 72 2e 20 4c 65 74 27 73 | 20 6e 6f 74 20 64 65 63 |r. Let's| not dec|
|00001a80| 6f 64 65 20 61 67 61 69 | 6e 2e 0a 20 20 69 66 20 |ode agai|n.. if |
|00001a90| 28 20 5b 73 75 70 70 6f | 72 74 65 64 41 75 74 68 |( [suppo|rtedAuth|
|00001aa0| 65 6e 74 69 63 61 74 69 | 6f 6e 4d 65 63 68 61 6e |enticati|onMechan|
|00001ab0| 69 73 6d 73 20 63 6f 75 | 6e 74 5d 20 3e 20 30 20 |isms cou|nt] > 0 |
|00001ac0| 29 0a 20 20 20 20 7b 0a | 20 20 20 20 20 20 72 65 |). {.| re|
|00001ad0| 74 75 72 6e 3b 0a 20 20 | 20 20 7d 0a 0a 20 20 61 |turn;. | }.. a|
|00001ae0| 52 61 6e 67 65 20 3d 20 | 5b 74 68 65 53 74 72 69 |Range = |[theStri|
|00001af0| 6e 67 20 72 61 6e 67 65 | 4f 66 53 74 72 69 6e 67 |ng range|OfString|
|00001b00| 3a 20 40 22 41 55 54 48 | 22 0a 09 09 20 20 20 20 |: @"AUTH|"... |
|00001b10| 20 20 6f 70 74 69 6f 6e | 73 3a 20 4e 53 43 61 73 | option|s: NSCas|
|00001b20| 65 49 6e 73 65 6e 73 69 | 74 69 76 65 53 65 61 72 |eInsensi|tiveSear|
|00001b30| 63 68 5d 3b 0a 20 20 0a | 20 20 69 66 20 28 20 61 |ch];. .| if ( a|
|00001b40| 52 61 6e 67 65 2e 6c 65 | 6e 67 74 68 20 29 0a 20 |Range.le|ngth ). |
|00001b50| 20 20 20 7b 0a 20 20 20 | 20 20 20 4e 53 53 74 72 | {. | NSStr|
|00001b60| 69 6e 67 20 2a 61 53 74 | 72 69 6e 67 3b 0a 0a 20 |ing *aSt|ring;.. |
|00001b70| 20 20 20 20 20 2f 2f 20 | 57 65 20 74 72 69 6d 20 | // |We trim |
|00001b80| 74 68 65 20 41 55 54 48 | 20 28 61 6e 64 20 74 68 |the AUTH| (and th|
|00001b90| 65 20 27 20 27 20 6f 72 | 20 27 3d 27 20 66 6f 6c |e ' ' or| '=' fol|
|00001ba0| 6c 6f 77 69 6e 67 20 69 | 74 29 0a 20 20 20 20 20 |lowing i|t). |
|00001bb0| 20 61 53 74 72 69 6e 67 | 20 3d 20 5b 74 68 65 53 | aString| = [theS|
|00001bc0| 74 72 69 6e 67 20 73 75 | 62 73 74 72 69 6e 67 46 |tring su|bstringF|
|00001bd0| 72 6f 6d 49 6e 64 65 78 | 3a 20 28 61 52 61 6e 67 |romIndex|: (aRang|
|00001be0| 65 2e 6c 6f 63 61 74 69 | 6f 6e 2b 61 52 61 6e 67 |e.locati|on+aRang|
|00001bf0| 65 2e 6c 65 6e 67 74 68 | 29 20 2b 20 31 5d 3b 20 |e.length|) + 1]; |
|00001c00| 0a 20 20 20 20 20 20 0a | 20 20 20 20 20 20 2f 2f |. .| //|
|00001c10| 20 57 65 20 74 72 69 6d | 20 6f 75 72 20 5c 72 5c | We trim| our \r\|
|00001c20| 6e 0a 20 20 20 20 20 20 | 61 53 74 72 69 6e 67 20 |n. |aString |
|00001c30| 3d 20 5b 61 53 74 72 69 | 6e 67 20 73 75 62 73 74 |= [aStri|ng subst|
|00001c40| 72 69 6e 67 54 6f 49 6e | 64 65 78 3a 20 28 5b 61 |ringToIn|dex: ([a|
|00001c50| 53 74 72 69 6e 67 20 6c | 65 6e 67 74 68 5d 20 2d |String l|ength] -|
|00001c60| 20 32 29 5d 3b 0a 20 20 | 20 20 20 20 0a 20 20 20 | 2)];. | . |
|00001c70| 20 20 20 5b 73 75 70 70 | 6f 72 74 65 64 41 75 74 | [supp|ortedAut|
|00001c80| 68 65 6e 74 69 63 61 74 | 69 6f 6e 4d 65 63 68 61 |henticat|ionMecha|
|00001c90| 6e 69 73 6d 73 20 61 64 | 64 4f 62 6a 65 63 74 73 |nisms ad|dObjects|
|00001ca0| 46 72 6f 6d 41 72 72 61 | 79 3a 20 5b 61 53 74 72 |FromArra|y: [aStr|
|00001cb0| 69 6e 67 20 63 6f 6d 70 | 6f 6e 65 6e 74 73 53 65 |ing comp|onentsSe|
|00001cc0| 70 61 72 61 74 65 64 42 | 79 53 74 72 69 6e 67 3a |paratedB|yString:|
|00001cd0| 20 40 22 20 22 5d 5d 3b | 0a 20 20 20 20 7d 0a 7d | @" "]];|. }.}|
|00001ce0| 0a 0a 2f 2f 0a 2f 2f 20 | 72 66 63 31 38 37 30 3a |..//.// |rfc1870:|
|00001cf0| 20 4d 65 73 73 61 67 65 | 20 53 69 7a 65 20 44 65 | Message| Size De|
|00001d00| 63 6c 61 72 61 74 69 6f | 6e 0a 2f 2f 20 54 68 69 |claratio|n.// Thi|
|00001d10| 73 20 6d 65 74 68 6f 64 | 20 72 65 63 65 69 76 65 |s method| receive|
|00001d20| 73 20 61 20 73 74 72 69 | 6e 67 20 6c 69 6b 65 3a |s a stri|ng like:|
|00001d30| 20 53 49 5a 45 20 73 69 | 7a 65 2d 70 61 72 61 6d | SIZE si|ze-param|
|00001d40| 0a 2f 2f 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |.// | |
|00001d50| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001d60| 20 20 20 20 20 20 20 20 | 73 69 7a 65 2d 70 61 72 | |size-par|
|00001d70| 61 6d 20 3a 3a 3d 20 5b | 31 2a 44 49 47 49 54 5d |am ::= [|1*DIGIT]|
|00001d80| 0a 2f 2f 20 49 74 20 64 | 65 63 6f 64 65 20 74 68 |.// It d|ecode th|
|00001d90| 65 20 6d 61 78 69 6d 75 | 6d 20 73 69 7a 65 20 28 |e maximu|m size (|
|00001da0| 6f 66 20 6f 6e 65 20 6d | 65 73 73 61 67 65 29 20 |of one m|essage) |
|00001db0| 61 6c 6c 6f 77 65 64 20 | 62 79 20 74 68 65 20 73 |allowed |by the s|
|00001dc0| 65 72 76 65 72 0a 2f 2f | 0a 2d 20 28 76 6f 69 64 |erver.//|.- (void|
|00001dd0| 29 20 5f 64 65 63 6f 64 | 65 4d 61 78 53 69 7a 65 |) _decod|eMaxSize|
|00001de0| 41 6c 6c 6f 77 65 64 46 | 72 6f 6d 53 74 72 69 6e |AllowedF|romStrin|
|00001df0| 67 3a 20 28 4e 53 53 74 | 72 69 6e 67 20 2a 29 20 |g: (NSSt|ring *) |
|00001e00| 74 68 65 53 74 72 69 6e | 67 0a 7b 0a 20 20 4e 53 |theStrin|g.{. NS|
|00001e10| 52 61 6e 67 65 20 61 52 | 61 6e 67 65 3b 0a 20 20 |Range aR|ange;. |
|00001e20| 0a 20 20 2f 2f 20 49 66 | 20 74 68 65 20 73 65 72 |. // If| the ser|
|00001e30| 76 65 72 20 6f 6e 6c 79 | 20 70 72 6f 76 69 64 65 |ver only| provide|
|00001e40| 64 20 75 73 20 74 68 65 | 20 53 49 5a 45 5c 72 5c |d us the| SIZE\r\|
|00001e50| 6e 2c 20 77 2f 6f 20 61 | 6e 79 20 76 61 6c 75 65 |n, w/o a|ny value|
|00001e60| 2e 0a 20 20 69 66 20 28 | 20 5b 74 68 65 53 74 72 |.. if (| [theStr|
|00001e70| 69 6e 67 20 6c 65 6e 67 | 74 68 5d 20 3d 3d 20 36 |ing leng|th] == 6|
|00001e80| 20 29 0a 20 20 20 20 7b | 0a 20 20 20 20 20 20 6d | ). {|. m|
|00001e90| 61 78 53 69 7a 65 41 6c | 6c 6f 77 65 64 42 79 53 |axSizeAl|lowedByS|
|00001ea0| 65 72 76 65 72 20 3d 20 | 30 3b 0a 20 20 20 20 20 |erver = |0;. |
|00001eb0| 20 72 65 74 75 72 6e 3b | 0a 20 20 20 20 7d 0a 0a | return;|. }..|
|00001ec0| 20 20 61 52 61 6e 67 65 | 20 3d 20 5b 74 68 65 53 | aRange| = [theS|
|00001ed0| 74 72 69 6e 67 20 72 61 | 6e 67 65 4f 66 53 74 72 |tring ra|ngeOfStr|
|00001ee0| 69 6e 67 3a 20 40 22 53 | 49 5a 45 22 0a 09 09 20 |ing: @"S|IZE"... |
|00001ef0| 20 20 20 20 20 6f 70 74 | 69 6f 6e 73 3a 20 4e 53 | opt|ions: NS|
|00001f00| 43 61 73 65 49 6e 73 65 | 6e 73 69 74 69 76 65 53 |CaseInse|nsitiveS|
|00001f10| 65 61 72 63 68 5d 3b 0a | 20 20 0a 20 20 69 66 20 |earch];.| . if |
|00001f20| 28 20 61 52 61 6e 67 65 | 2e 6c 65 6e 67 74 68 20 |( aRange|.length |
|00001f30| 29 0a 20 20 20 20 7b 0a | 20 20 20 20 20 20 4e 53 |). {.| NS|
|00001f40| 53 74 72 69 6e 67 20 2a | 61 53 74 72 69 6e 67 3b |String *|aString;|
|00001f50| 0a 20 20 20 20 20 20 0a | 20 20 20 20 20 20 2f 2f |. .| //|
|00001f60| 20 57 65 20 74 72 69 6d | 20 74 68 65 20 53 49 5a | We trim| the SIZ|
|00001f70| 45 20 28 61 6e 64 20 74 | 68 65 20 27 20 27 20 6f |E (and t|he ' ' o|
|00001f80| 72 20 27 3d 27 20 66 6f | 6c 6c 6f 77 69 6e 67 20 |r '=' fo|llowing |
|00001f90| 69 74 29 0a 20 20 20 20 | 20 20 61 53 74 72 69 6e |it). | aStrin|
|00001fa0| 67 20 3d 20 5b 74 68 65 | 53 74 72 69 6e 67 20 73 |g = [the|String s|
|00001fb0| 75 62 73 74 72 69 6e 67 | 46 72 6f 6d 49 6e 64 65 |ubstring|FromInde|
|00001fc0| 78 3a 20 28 61 52 61 6e | 67 65 2e 6c 6f 63 61 74 |x: (aRan|ge.locat|
|00001fd0| 69 6f 6e 2b 61 52 61 6e | 67 65 2e 6c 65 6e 67 74 |ion+aRan|ge.lengt|
|00001fe0| 68 29 20 2b 20 31 5d 3b | 20 0a 20 20 20 20 20 20 |h) + 1];| . |
|00001ff0| 0a 20 20 20 20 20 20 2f | 2f 20 57 65 20 74 72 69 |. /|/ We tri|
|00002000| 6d 20 6f 75 72 20 5c 72 | 5c 6e 0a 20 20 20 20 20 |m our \r|\n. |
|00002010| 20 61 53 74 72 69 6e 67 | 20 3d 20 5b 61 53 74 72 | aString| = [aStr|
|00002020| 69 6e 67 20 73 75 62 73 | 74 72 69 6e 67 54 6f 49 |ing subs|tringToI|
|00002030| 6e 64 65 78 3a 20 28 5b | 61 53 74 72 69 6e 67 20 |ndex: ([|aString |
|00002040| 6c 65 6e 67 74 68 5d 20 | 2d 20 32 29 5d 3b 0a 20 |length] |- 2)];. |
|00002050| 20 20 20 20 20 0a 20 20 | 20 20 20 20 6d 61 78 53 | . | maxS|
|00002060| 69 7a 65 41 6c 6c 6f 77 | 65 64 42 79 53 65 72 76 |izeAllow|edByServ|
|00002070| 65 72 20 3d 20 5b 61 53 | 74 72 69 6e 67 20 69 6e |er = [aS|tring in|
|00002080| 74 56 61 6c 75 65 5d 3b | 0a 20 20 20 20 7d 0a 7d |tValue];|. }.}|
|00002090| 0a 0a 0a 2f 2f 0a 2f 2f | 0a 2f 2f 0a 2d 20 28 42 |...//.//|.//.- (B|
|000020a0| 4f 4f 4c 29 20 5f 72 65 | 73 70 6f 6e 73 65 46 72 |OOL) _re|sponseFr|
|000020b0| 6f 6d 53 65 72 76 65 72 | 49 73 45 71 75 61 6c 54 |omServer|IsEqualT|
|000020c0| 6f 43 6f 64 65 3a 20 28 | 4e 53 53 74 72 69 6e 67 |oCode: (|NSString|
|000020d0| 20 2a 29 20 74 68 65 43 | 6f 64 65 0a 7b 0a 20 20 | *) theC|ode.{. |
|000020e0| 72 65 74 75 72 6e 20 5b | 73 65 6c 66 20 5f 72 65 |return [|self _re|
|000020f0| 73 70 6f 6e 73 65 46 72 | 6f 6d 53 65 72 76 65 72 |sponseFr|omServer|
|00002100| 49 73 45 71 75 61 6c 54 | 6f 43 6f 64 65 3a 20 74 |IsEqualT|oCode: t|
|00002110| 68 65 43 6f 64 65 20 0a | 09 20 20 20 20 20 20 20 |heCode .|. |
|00002120| 73 61 76 65 52 65 73 70 | 6f 6e 73 65 49 6e 3a 20 |saveResp|onseIn: |
|00002130| 6e 69 6c 5d 3b 0a 7d 0a | 0a 0a 2f 2f 0a 2f 2f 0a |nil];.}.|..//.//.|
|00002140| 2f 2f 0a 2d 20 28 42 4f | 4f 4c 29 20 5f 72 65 73 |//.- (BO|OL) _res|
|00002150| 70 6f 6e 73 65 46 72 6f | 6d 53 65 72 76 65 72 49 |ponseFro|mServerI|
|00002160| 73 45 71 75 61 6c 54 6f | 43 6f 64 65 3a 20 28 4e |sEqualTo|Code: (N|
|00002170| 53 53 74 72 69 6e 67 20 | 2a 29 20 74 68 65 43 6f |SString |*) theCo|
|00002180| 64 65 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |de. | |
|00002190| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 73 61 | | sa|
|000021a0| 76 65 52 65 73 70 6f 6e | 73 65 49 6e 3a 20 28 53 |veRespon|seIn: (S|
|000021b0| 4d 54 50 52 65 73 70 6f | 6e 73 65 4c 69 6e 65 73 |MTPRespo|nseLines|
|000021c0| 20 2a 29 20 61 53 4d 54 | 50 52 65 73 70 6f 6e 73 | *) aSMT|PRespons|
|000021d0| 65 0a 7b 0a 20 20 4e 53 | 53 74 72 69 6e 67 20 2a |e.{. NS|String *|
|000021e0| 61 53 74 72 69 6e 67 3b | 0a 20 20 63 68 61 72 20 |aString;|. char |
|000021f0| 63 5b 32 5d 2c 20 62 75 | 66 5b 34 5d 3b 0a 20 20 |c[2], bu|f[4];. |
|00002200| 42 4f 4f 4c 20 6d 75 6c | 74 69 4c 69 6e 65 3b 0a |BOOL mul|tiLine;.|
|00002210| 20 20 0a 20 20 0a 20 20 | 6d 75 6c 74 69 4c 69 6e | . . |multiLin|
|00002220| 65 20 3d 20 59 45 53 3b | 0a 20 20 0a 20 20 77 68 |e = YES;|. . wh|
|00002230| 69 6c 65 20 28 20 6d 75 | 6c 74 69 4c 69 6e 65 20 |ile ( mu|ltiLine |
|00002240| 3d 3d 20 59 45 53 20 29 | 0a 20 20 20 20 7b 0a 20 |== YES )|. {. |
|00002250| 20 20 20 20 20 2f 2f 20 | 57 65 20 72 65 61 64 20 | // |We read |
|00002260| 74 68 65 20 63 6f 64 65 | 20 74 68 61 74 20 6f 75 |the code| that ou|
|00002270| 72 20 53 4d 54 50 20 73 | 65 72 76 65 72 20 73 65 |r SMTP s|erver se|
|00002280| 6e 74 20 75 73 20 62 61 | 63 6b 0a 20 20 20 20 20 |nt us ba|ck. |
|00002290| 20 61 53 74 72 69 6e 67 | 20 3d 20 5b 5b 73 65 6c | aString| = [[sel|
|000022a0| 66 20 74 63 70 43 6f 6e | 6e 65 63 74 69 6f 6e 5d |f tcpCon|nection]|
|000022b0| 20 72 65 61 64 53 74 72 | 69 6e 67 4f 66 4c 65 6e | readStr|ingOfLen|
|000022c0| 67 74 68 3a 20 33 5d 3b | 0a 20 20 20 20 20 20 0a |gth: 3];|. .|
|000022d0| 20 20 20 20 20 20 69 66 | 20 28 20 21 61 53 74 72 | if| ( !aStr|
|000022e0| 69 6e 67 20 29 0a 09 7b | 0a 09 20 20 4e 53 44 65 |ing )..{|.. NSDe|
|000022f0| 62 75 67 4c 6f 67 28 40 | 22 53 4d 54 50 3a 20 45 |bugLog(@|"SMTP: E|
|00002300| 72 72 6f 72 20 6f 6e 20 | 72 65 61 64 69 6e 67 20 |rror on |reading |
|00002310| 74 68 65 20 63 6f 64 65 | 2e 22 29 3b 0a 09 20 20 |the code|.");.. |
|00002320| 72 65 74 75 72 6e 20 4e | 4f 3b 0a 09 7d 0a 20 20 |return N|O;..}. |
|00002330| 20 20 20 20 0a 20 20 20 | 20 20 20 2f 2f 20 57 65 | . | // We|
|00002340| 20 67 65 74 20 74 68 65 | 20 63 53 74 72 69 6e 67 | get the| cString|
|00002350| 20 6f 66 20 6f 75 72 20 | 73 74 72 69 6e 67 20 69 | of our |string i|
|00002360| 6e 20 6f 75 72 20 62 75 | 66 66 65 72 20 62 75 66 |n our bu|ffer buf|
|00002370| 0a 20 20 20 20 20 20 5b | 61 53 74 72 69 6e 67 20 |. [|aString |
|00002380| 67 65 74 43 53 74 72 69 | 6e 67 3a 20 62 75 66 5d |getCStri|ng: buf]|
|00002390| 3b 0a 20 20 20 20 20 20 | 0a 20 20 20 20 20 20 2f |;. |. /|
|000023a0| 2f 20 57 65 20 76 65 72 | 69 66 79 20 69 66 20 6f |/ We ver|ify if o|
|000023b0| 75 72 20 72 65 73 70 6f | 6e 73 65 20 69 73 20 6d |ur respo|nse is m|
|000023c0| 75 6c 74 69 6c 69 6e 65 | 20 6f 72 20 6e 6f 74 20 |ultiline| or not |
|000023d0| 3f 0a 20 20 20 20 20 20 | 61 53 74 72 69 6e 67 20 |?. |aString |
|000023e0| 3d 20 5b 5b 73 65 6c 66 | 20 74 63 70 43 6f 6e 6e |= [[self| tcpConn|
|000023f0| 65 63 74 69 6f 6e 5d 20 | 72 65 61 64 53 74 72 69 |ection] |readStri|
|00002400| 6e 67 4f 66 4c 65 6e 67 | 74 68 3a 20 31 5d 3b 0a |ngOfLeng|th: 1];.|
|00002410| 20 20 20 20 20 20 0a 20 | 20 20 20 20 20 2f 2f 20 | . | // |
|00002420| 45 78 74 72 61 63 74 20 | 66 72 6f 6d 20 72 66 63 |Extract |from rfc|
|00002430| 32 38 32 31 3a 0a 20 20 | 20 20 20 20 2f 2f 20 52 |2821:. | // R|
|00002440| 65 70 6c 79 2d 6c 69 6e | 65 20 3d 20 52 65 70 6c |eply-lin|e = Repl|
|00002450| 79 2d 63 6f 64 65 20 5b | 20 53 50 20 74 65 78 74 |y-code [| SP text|
|00002460| 20 5d 20 43 52 4c 46 0a | 20 20 20 20 20 20 69 66 | ] CRLF.| if|
|00002470| 20 28 20 21 61 53 74 72 | 69 6e 67 20 29 0a 09 7b | ( !aStr|ing )..{|
|00002480| 0a 09 20 20 20 20 20 20 | 6d 75 6c 74 69 4c 69 6e |.. |multiLin|
|00002490| 65 20 3d 20 4e 4f 3b 0a | 09 7d 0a 20 20 20 20 20 |e = NO;.|.}. |
|000024a0| 20 65 6c 73 65 0a 09 7b | 0a 09 20 20 2f 2f 20 57 | else..{|.. // W|
|000024b0| 65 20 67 65 74 20 74 68 | 65 20 63 53 74 72 69 6e |e get th|e cStrin|
|000024c0| 67 20 6f 66 20 6f 75 72 | 20 73 74 72 69 6e 67 20 |g of our| string |
|000024d0| 69 6e 20 6f 75 72 20 62 | 75 66 66 65 72 20 63 0a |in our b|uffer c.|
|000024e0| 09 20 20 5b 61 53 74 72 | 69 6e 67 20 67 65 74 43 |. [aStr|ing getC|
|000024f0| 53 74 72 69 6e 67 3a 20 | 63 5d 3b 0a 09 20 20 0a |String: |c];.. .|
|00002500| 09 20 20 2f 2f 20 57 65 | 20 76 65 72 69 66 79 20 |. // We| verify |
|00002510| 69 66 20 77 65 20 68 61 | 76 65 20 61 20 6d 75 6c |if we ha|ve a mul|
|00002520| 74 69 6c 69 6e 65 20 72 | 65 73 70 6f 6e 73 65 20 |tiline r|esponse |
|00002530| 66 72 6f 6d 20 6f 75 72 | 20 53 4d 54 50 20 73 65 |from our| SMTP se|
|00002540| 72 76 65 72 2e 0a 09 20 | 20 69 66 20 28 20 63 5b |rver... | if ( c[|
|00002550| 30 5d 20 3d 3d 20 27 2d | 27 20 29 0a 09 20 20 20 |0] == '-|' ).. |
|00002560| 20 7b 0a 09 20 20 20 20 | 20 20 6d 75 6c 74 69 4c | {.. | multiL|
|00002570| 69 6e 65 20 3d 20 59 45 | 53 3b 0a 09 20 20 20 20 |ine = YE|S;.. |
|00002580| 7d 0a 09 20 20 65 6c 73 | 65 20 0a 09 20 20 20 20 |}.. els|e .. |
|00002590| 7b 0a 09 20 20 20 20 20 | 20 6d 75 6c 74 69 4c 69 |{.. | multiLi|
|000025a0| 6e 65 20 3d 20 4e 4f 3b | 0a 09 20 20 20 20 7d 0a |ne = NO;|.. }.|
|000025b0| 09 7d 0a 20 20 20 20 20 | 20 0a 20 20 20 20 20 20 |.}. | . |
|000025c0| 2f 2f 20 57 65 20 72 65 | 61 64 20 74 68 65 20 72 |// We re|ad the r|
|000025d0| 65 73 70 6f 6e 73 65 20 | 74 6f 20 74 68 65 20 65 |esponse |to the e|
|000025e0| 6e 64 0a 20 20 20 20 20 | 20 61 53 74 72 69 6e 67 |nd. | aString|
|000025f0| 20 3d 20 5b 5b 73 65 6c | 66 20 74 63 70 43 6f 6e | = [[sel|f tcpCon|
|00002600| 6e 65 63 74 69 6f 6e 5d | 20 72 65 61 64 4c 69 6e |nection]| readLin|
|00002610| 65 5d 3b 0a 20 20 20 20 | 20 20 0a 20 20 20 20 20 |e];. | . |
|00002620| 20 2f 2f 20 49 66 20 77 | 65 20 68 61 76 65 20 61 | // If w|e have a|
|00002630| 6e 20 6f 62 6a 65 63 74 | 2c 20 77 65 20 73 61 76 |n object|, we sav|
|00002640| 65 20 74 68 65 20 6c 69 | 6e 65 0a 20 20 20 20 20 |e the li|ne. |
|00002650| 20 69 66 20 28 20 61 53 | 4d 54 50 52 65 73 70 6f | if ( aS|MTPRespo|
|00002660| 6e 73 65 20 29 0a 09 7b | 0a 09 20 20 5b 61 53 4d |nse )..{|.. [aSM|
|00002670| 54 50 52 65 73 70 6f 6e | 73 65 20 61 64 64 4c 69 |TPRespon|se addLi|
|00002680| 6e 65 3a 20 61 53 74 72 | 69 6e 67 5d 3b 0a 09 7d |ne: aStr|ing];..}|
|00002690| 0a 20 20 20 20 7d 0a 20 | 20 0a 20 20 69 66 20 28 |. }. | . if (|
|000026a0| 20 21 5b 74 68 65 43 6f | 64 65 20 69 73 45 71 75 | ![theCo|de isEqu|
|000026b0| 61 6c 54 6f 53 74 72 69 | 6e 67 3a 20 5b 4e 53 53 |alToStri|ng: [NSS|
|000026c0| 74 72 69 6e 67 20 73 74 | 72 69 6e 67 57 69 74 68 |tring st|ringWith|
|000026d0| 43 53 74 72 69 6e 67 3a | 20 62 75 66 5d 5d 20 29 |CString:| buf]] )|
|000026e0| 0a 20 20 20 20 7b 0a 20 | 20 20 20 20 20 72 65 74 |. {. | ret|
|000026f0| 75 72 6e 20 4e 4f 3b 0a | 20 20 20 20 7d 0a 20 20 |urn NO;.| }. |
|00002700| 0a 20 20 72 65 74 75 72 | 6e 20 59 45 53 3b 0a 7d |. retur|n YES;.}|
|00002710| 0a 0a 0a 2f 2f 0a 2f 2f | 0a 2f 2f 0a 2d 20 28 42 |...//.//|.//.- (B|
|00002720| 4f 4f 4c 29 20 5f 73 65 | 6e 64 4d 65 73 73 61 67 |OOL) _se|ndMessag|
|00002730| 65 3a 20 28 4d 65 73 73 | 61 67 65 20 2a 29 20 74 |e: (Mess|age *) t|
|00002740| 68 65 4d 65 73 73 61 67 | 65 0a 20 20 20 20 20 20 |heMessag|e. |
|00002750| 20 77 69 74 68 52 61 77 | 53 6f 75 72 63 65 3a 20 | withRaw|Source: |
|00002760| 28 4e 53 44 61 74 61 20 | 2a 29 20 74 68 65 52 61 |(NSData |*) theRa|
|00002770| 77 53 6f 75 72 63 65 0a | 7b 0a 20 20 42 4f 4f 4c |wSource.|{. BOOL|
|00002780| 20 69 73 42 6f 75 6e 63 | 65 64 4d 65 73 73 61 67 | isBounc|edMessag|
|00002790| 65 3b 0a 20 20 4e 53 53 | 74 72 69 6e 67 20 2a 66 |e;. NSS|tring *f|
|000027a0| 72 6f 6d 3b 0a 20 20 4e | 53 52 61 6e 67 65 20 61 |rom;. N|SRange a|
|000027b0| 52 61 6e 67 65 3b 0a 20 | 20 0a 20 20 69 66 20 28 |Range;. | . if (|
|000027c0| 20 21 74 68 65 4d 65 73 | 73 61 67 65 20 29 0a 20 | !theMes|sage ). |
|000027d0| 20 20 20 7b 0a 20 20 20 | 20 20 20 72 65 74 75 72 | {. | retur|
|000027e0| 6e 20 4e 4f 3b 0a 20 20 | 20 20 7d 0a 20 20 0a 20 |n NO;. | }. . |
|000027f0| 20 2f 2f 20 57 65 20 66 | 69 72 73 74 20 76 65 72 | // We f|irst ver|
|00002800| 69 66 79 20 69 66 20 69 | 74 27 73 20 61 20 62 6f |ify if i|t's a bo|
|00002810| 75 6e 63 65 64 20 6d 65 | 73 73 61 67 65 0a 20 20 |unced me|ssage. |
|00002820| 69 66 20 28 20 5b 74 68 | 65 4d 65 73 73 61 67 65 |if ( [th|eMessage|
|00002830| 20 72 65 73 65 6e 74 46 | 72 6f 6d 20 5d 29 0a 20 | resentF|rom ]). |
|00002840| 20 20 20 7b 0a 20 20 20 | 20 20 20 69 73 42 6f 75 | {. | isBou|
|00002850| 6e 63 65 64 4d 65 73 73 | 61 67 65 20 3d 20 59 45 |ncedMess|age = YE|
|00002860| 53 3b 0a 20 20 20 20 20 | 20 66 72 6f 6d 20 3d 20 |S;. | from = |
|00002870| 5b 5b 74 68 65 4d 65 73 | 73 61 67 65 20 72 65 73 |[[theMes|sage res|
|00002880| 65 6e 74 46 72 6f 6d 5d | 20 61 64 64 72 65 73 73 |entFrom]| address|
|00002890| 5d 3b 0a 20 20 20 20 7d | 0a 20 20 65 6c 73 65 0a |];. }|. else.|
|000028a0| 20 20 20 20 7b 0a 20 20 | 20 20 20 20 69 73 42 6f | {. | isBo|
|000028b0| 75 6e 63 65 64 4d 65 73 | 73 61 67 65 20 3d 20 4e |uncedMes|sage = N|
|000028c0| 4f 3b 0a 20 20 20 20 20 | 20 66 72 6f 6d 20 3d 20 |O;. | from = |
|000028d0| 5b 5b 74 68 65 4d 65 73 | 73 61 67 65 20 66 72 6f |[[theMes|sage fro|
|000028e0| 6d 5d 20 61 64 64 72 65 | 73 73 5d 3b 0a 20 20 20 |m] addre|ss];. |
|000028f0| 20 7d 0a 20 20 0a 20 20 | 2f 2f 0a 20 20 2f 2f 20 | }. . |//. // |
|00002900| 41 63 63 6f 72 64 69 6e | 67 20 74 6f 20 52 46 43 |Accordin|g to RFC|
|00002910| 20 32 38 32 31 20 73 65 | 63 74 69 6f 6e 20 34 2e | 2821 se|ction 4.|
|00002920| 35 2e 32 2c 20 77 65 20 | 6d 75 73 74 20 63 68 65 |5.2, we |must che|
|00002930| 63 6b 20 66 6f 72 20 74 | 68 65 20 63 68 61 72 61 |ck for t|he chara|
|00002940| 63 74 65 72 0a 20 20 2f | 2f 20 73 65 71 75 65 6e |cter. /|/ sequen|
|00002950| 63 65 20 22 3c 43 52 4c | 46 3e 2e 3c 43 52 4c 46 |ce "<CRL|F>.<CRLF|
|00002960| 3e 22 3b 20 61 6e 79 20 | 6f 63 63 75 72 72 65 6e |>"; any |occurren|
|00002970| 63 65 20 68 61 76 65 20 | 69 74 73 20 70 65 72 69 |ce have |its peri|
|00002980| 6f 64 20 64 75 70 6c 69 | 63 61 74 65 64 0a 20 20 |od dupli|cated. |
|00002990| 2f 2f 20 74 6f 20 61 76 | 6f 69 64 20 64 61 74 61 |// to av|oid data|
|000029a0| 20 74 72 61 6e 73 70 61 | 72 65 6e 63 79 2e 20 0a | transpa|rency. .|
|000029b0| 20 20 2f 2f 0a 20 20 61 | 52 61 6e 67 65 20 3d 20 | //. a|Range = |
|000029c0| 5b 74 68 65 52 61 77 53 | 6f 75 72 63 65 20 72 61 |[theRawS|ource ra|
|000029d0| 6e 67 65 4f 66 43 53 74 | 72 69 6e 67 3a 20 22 5c |ngeOfCSt|ring: "\|
|000029e0| 72 5c 6e 2e 22 5d 3b 0a | 20 20 0a 20 20 69 66 20 |r\n."];.| . if |
|000029f0| 28 20 61 52 61 6e 67 65 | 2e 6c 6f 63 61 74 69 6f |( aRange|.locatio|
|00002a00| 6e 20 21 3d 20 4e 53 4e | 6f 74 46 6f 75 6e 64 20 |n != NSN|otFound |
|00002a10| 29 0a 20 20 20 20 7b 0a | 20 20 20 20 20 20 4e 53 |). {.| NS|
|00002a20| 4d 75 74 61 62 6c 65 44 | 61 74 61 20 2a 61 52 61 |MutableD|ata *aRa|
|00002a30| 77 53 6f 75 72 63 65 3b | 0a 20 20 20 20 20 20 4e |wSource;|. N|
|00002a40| 53 52 61 6e 67 65 20 61 | 53 75 62 52 61 6e 67 65 |SRange a|SubRange|
|00002a50| 3b 0a 20 20 20 20 20 20 | 0a 20 20 20 20 20 20 61 |;. |. a|
|00002a60| 52 61 77 53 6f 75 72 63 | 65 20 3d 20 5b 4e 53 4d |RawSourc|e = [NSM|
|00002a70| 75 74 61 62 6c 65 44 61 | 74 61 20 64 61 74 61 57 |utableDa|ta dataW|
|00002a80| 69 74 68 43 61 70 61 63 | 69 74 79 3a 20 5b 74 68 |ithCapac|ity: [th|
|00002a90| 65 52 61 77 53 6f 75 72 | 63 65 20 6c 65 6e 67 74 |eRawSour|ce lengt|
|00002aa0| 68 5d 20 2b 20 31 5d 3b | 0a 20 20 20 20 20 20 61 |h] + 1];|. a|
|00002ab0| 53 75 62 52 61 6e 67 65 | 20 3d 20 4e 53 4d 61 6b |SubRange| = NSMak|
|00002ac0| 65 52 61 6e 67 65 28 30 | 2c 30 29 3b 0a 20 20 20 |eRange(0|,0);. |
|00002ad0| 20 20 20 0a 20 20 20 20 | 20 20 64 6f 0a 09 7b 0a | . | do..{.|
|00002ae0| 09 20 20 61 53 75 62 52 | 61 6e 67 65 20 3d 20 4e |. aSubR|ange = N|
|00002af0| 53 4d 61 6b 65 52 61 6e | 67 65 28 61 53 75 62 52 |SMakeRan|ge(aSubR|
|00002b00| 61 6e 67 65 2e 6c 6f 63 | 61 74 69 6f 6e 2c 20 61 |ange.loc|ation, a|
|00002b10| 52 61 6e 67 65 2e 6c 6f | 63 61 74 69 6f 6e 20 2d |Range.lo|cation -|
|00002b20| 20 61 53 75 62 52 61 6e | 67 65 2e 6c 6f 63 61 74 | aSubRan|ge.locat|
|00002b30| 69 6f 6e 29 3b 0a 0a 09 | 20 20 5b 61 52 61 77 53 |ion);...| [aRawS|
|00002b40| 6f 75 72 63 65 20 61 70 | 70 65 6e 64 44 61 74 61 |ource ap|pendData|
|00002b50| 3a 20 5b 74 68 65 52 61 | 77 53 6f 75 72 63 65 20 |: [theRa|wSource |
|00002b60| 73 75 62 64 61 74 61 57 | 69 74 68 52 61 6e 67 65 |subdataW|ithRange|
|00002b70| 3a 20 61 53 75 62 52 61 | 6e 67 65 5d 5d 3b 0a 09 |: aSubRa|nge]];..|
|00002b80| 20 20 5b 61 52 61 77 53 | 6f 75 72 63 65 20 61 70 | [aRawS|ource ap|
|00002b90| 70 65 6e 64 42 79 74 65 | 73 3a 20 22 5c 72 5c 6e |pendByte|s: "\r\n|
|00002ba0| 2e 2e 22 0a 09 09 20 20 | 20 20 20 20 6c 65 6e 67 |.."... | leng|
|00002bb0| 74 68 3a 20 34 5d 3b 0a | 0a 09 20 20 61 53 75 62 |th: 4];.|.. aSub|
|00002bc0| 52 61 6e 67 65 20 3d 20 | 4e 53 4d 61 6b 65 52 61 |Range = |NSMakeRa|
|00002bd0| 6e 67 65 28 61 52 61 6e | 67 65 2e 6c 6f 63 61 74 |nge(aRan|ge.locat|
|00002be0| 69 6f 6e 20 2b 20 33 2c | 20 5b 74 68 65 52 61 77 |ion + 3,| [theRaw|
|00002bf0| 53 6f 75 72 63 65 20 6c | 65 6e 67 74 68 5d 20 2d |Source l|ength] -|
|00002c00| 20 61 52 61 6e 67 65 2e | 6c 6f 63 61 74 69 6f 6e | aRange.|location|
|00002c10| 20 2d 20 33 29 3b 0a 09 | 20 20 61 52 61 6e 67 65 | - 3);..| aRange|
|00002c20| 20 3d 20 5b 74 68 65 52 | 61 77 53 6f 75 72 63 65 | = [theR|awSource|
|00002c30| 20 72 61 6e 67 65 4f 66 | 43 53 74 72 69 6e 67 3a | rangeOf|CString:|
|00002c40| 20 22 5c 72 5c 6e 2e 22 | 0a 09 09 09 09 20 6f 70 | "\r\n."|..... op|
|00002c50| 74 69 6f 6e 73 3a 20 30 | 20 0a 09 09 09 09 20 72 |tions: 0| ..... r|
|00002c60| 61 6e 67 65 3a 20 61 53 | 75 62 52 61 6e 67 65 5d |ange: aS|ubRange]|
|00002c70| 3b 0a 09 7d 20 0a 20 20 | 20 20 20 20 77 68 69 6c |;..} . | whil|
|00002c80| 65 20 28 20 61 52 61 6e | 67 65 2e 6c 6f 63 61 74 |e ( aRan|ge.locat|
|00002c90| 69 6f 6e 20 21 3d 20 4e | 53 4e 6f 74 46 6f 75 6e |ion != N|SNotFoun|
|00002ca0| 64 20 29 3b 0a 20 20 20 | 20 20 20 0a 20 20 20 20 |d );. | . |
|00002cb0| 20 20 5b 61 52 61 77 53 | 6f 75 72 63 65 20 61 70 | [aRawS|ource ap|
|00002cc0| 70 65 6e 64 44 61 74 61 | 3a 20 5b 74 68 65 52 61 |pendData|: [theRa|
|00002cd0| 77 53 6f 75 72 63 65 20 | 73 75 62 64 61 74 61 57 |wSource |subdataW|
|00002ce0| 69 74 68 52 61 6e 67 65 | 3a 20 61 53 75 62 52 61 |ithRange|: aSubRa|
|00002cf0| 6e 67 65 5d 5d 3b 0a 20 | 20 20 20 20 20 74 68 65 |nge]];. | the|
|00002d00| 52 61 77 53 6f 75 72 63 | 65 20 3d 20 61 52 61 77 |RawSourc|e = aRaw|
|00002d10| 53 6f 75 72 63 65 3b 0a | 20 20 20 20 7d 0a 0a 20 |Source;.| }.. |
|00002d20| 20 69 66 20 28 20 6d 61 | 78 53 69 7a 65 41 6c 6c | if ( ma|xSizeAll|
|00002d30| 6f 77 65 64 42 79 53 65 | 72 76 65 72 20 21 3d 20 |owedBySe|rver != |
|00002d40| 30 20 29 0a 20 20 20 20 | 7b 0a 20 20 20 20 20 20 |0 ). |{. |
|00002d50| 2f 2f 20 57 65 20 64 65 | 63 6c 61 72 65 20 74 68 |// We de|clare th|
|00002d60| 65 20 6d 65 73 73 61 67 | 65 20 73 69 7a 65 0a 20 |e messag|e size. |
|00002d70| 20 20 20 20 20 5b 5b 73 | 65 6c 66 20 74 63 70 43 | [[s|elf tcpC|
|00002d80| 6f 6e 6e 65 63 74 69 6f | 6e 5d 20 77 72 69 74 65 |onnectio|n] write|
|00002d90| 4c 69 6e 65 3a 20 5b 4e | 53 53 74 72 69 6e 67 20 |Line: [N|SString |
|00002da0| 73 74 72 69 6e 67 57 69 | 74 68 46 6f 72 6d 61 74 |stringWi|thFormat|
|00002db0| 3a 20 40 22 4d 41 49 4c | 20 46 52 4f 4d 3a 3c 25 |: @"MAIL| FROM:<%|
|00002dc0| 40 3e 20 53 49 5a 45 3d | 25 64 22 2c 20 0a 09 09 |@> SIZE=|%d", ...|
|00002dd0| 09 09 09 09 20 66 72 6f | 6d 2c 20 0a 09 09 09 09 |.... fro|m, .....|
|00002de0| 09 09 20 5b 74 68 65 52 | 61 77 53 6f 75 72 63 65 |.. [theR|awSource|
|00002df0| 20 6c 65 6e 67 74 68 5d | 5d 5d 3b 0a 20 20 20 20 | length]|]];. |
|00002e00| 20 20 2f 2f 4e 53 44 65 | 62 75 67 4c 6f 67 28 40 | //NSDe|bugLog(@|
|00002e10| 22 53 4d 54 50 3a 20 53 | 69 7a 65 20 6f 66 20 6d |"SMTP: S|ize of m|
|00002e20| 65 73 73 61 67 65 3a 20 | 25 64 22 2c 20 5b 74 68 |essage: |%d", [th|
|00002e30| 65 52 61 77 53 6f 75 72 | 63 65 20 6c 65 6e 67 74 |eRawSour|ce lengt|
|00002e40| 68 5d 29 3b 0a 20 20 20 | 20 7d 0a 20 20 65 6c 73 |h]);. | }. els|
|00002e50| 65 0a 20 20 20 20 7b 0a | 20 20 20 20 20 20 5b 5b |e. {.| [[|
|00002e60| 73 65 6c 66 20 74 63 70 | 43 6f 6e 6e 65 63 74 69 |self tcp|Connecti|
|00002e70| 6f 6e 5d 20 77 72 69 74 | 65 4c 69 6e 65 3a 20 5b |on] writ|eLine: [|
|00002e80| 4e 53 53 74 72 69 6e 67 | 20 73 74 72 69 6e 67 57 |NSString| stringW|
|00002e90| 69 74 68 46 6f 72 6d 61 | 74 3a 20 40 22 4d 41 49 |ithForma|t: @"MAI|
|00002ea0| 4c 20 46 52 4f 4d 3a 3c | 25 40 3e 22 2c 20 66 72 |L FROM:<|%@>", fr|
|00002eb0| 6f 6d 5d 5d 3b 0a 20 20 | 20 20 7d 0a 20 20 0a 20 |om]];. | }. . |
|00002ec0| 20 2f 2f 20 57 65 20 76 | 65 72 69 66 79 20 74 68 | // We v|erify th|
|00002ed0| 65 20 72 65 73 70 6f 6e | 73 65 20 66 72 6f 6d 20 |e respon|se from |
|00002ee0| 6f 75 72 20 73 65 72 76 | 65 72 20 66 72 6f 6d 20 |our serv|er from |
|00002ef0| 74 68 65 20 4d 41 49 4c | 20 46 52 4f 4d 20 63 6f |the MAIL| FROM co|
|00002f00| 6d 6d 61 6e 64 0a 20 20 | 69 66 20 28 20 21 5b 73 |mmand. |if ( ![s|
|00002f10| 65 6c 66 20 5f 72 65 73 | 70 6f 6e 73 65 46 72 6f |elf _res|ponseFro|
|00002f20| 6d 53 65 72 76 65 72 49 | 73 45 71 75 61 6c 54 6f |mServerI|sEqualTo|
|00002f30| 43 6f 64 65 3a 20 40 22 | 32 35 30 22 5d 20 29 0a |Code: @"|250"] ).|
|00002f40| 20 20 20 20 7b 0a 20 20 | 20 20 20 20 72 65 74 75 | {. | retu|
|00002f50| 72 6e 20 4e 4f 3b 0a 20 | 20 20 20 7d 0a 20 20 0a |rn NO;. | }. .|
|00002f60| 20 20 69 66 20 28 20 21 | 5b 73 65 6c 66 20 5f 77 | if ( !|[self _w|
|00002f70| 72 69 74 65 52 65 63 69 | 70 69 65 6e 74 73 3a 20 |riteReci|pients: |
|00002f80| 5b 74 68 65 4d 65 73 73 | 61 67 65 20 72 65 63 69 |[theMess|age reci|
|00002f90| 70 69 65 6e 74 73 5d 20 | 0a 09 20 20 20 20 20 20 |pients] |.. |
|00002fa0| 75 73 69 6e 67 42 6f 75 | 6e 63 69 6e 67 4d 6f 64 |usingBou|ncingMod|
|00002fb0| 65 3a 20 69 73 42 6f 75 | 6e 63 65 64 4d 65 73 73 |e: isBou|ncedMess|
|00002fc0| 61 67 65 5d 20 29 0a 20 | 20 20 20 7b 0a 20 20 20 |age] ). | {. |
|00002fd0| 20 20 20 72 65 74 75 72 | 6e 20 4e 4f 3b 0a 20 20 | retur|n NO;. |
|00002fe0| 20 20 7d 0a 20 20 0a 20 | 20 69 66 20 28 20 5b 73 | }. . | if ( [s|
|00002ff0| 65 6c 66 20 5f 77 72 69 | 74 65 4d 65 73 73 61 67 |elf _wri|teMessag|
|00003000| 65 46 72 6f 6d 52 61 77 | 53 6f 75 72 63 65 3a 20 |eFromRaw|Source: |
|00003010| 74 68 65 52 61 77 53 6f | 75 72 63 65 5d 20 29 0a |theRawSo|urce] ).|
|00003020| 20 20 20 20 7b 0a 20 20 | 20 20 20 20 69 66 20 28 | {. | if (|
|00003030| 20 21 5b 73 65 6c 66 20 | 5f 72 65 73 70 6f 6e 73 | ![self |_respons|
|00003040| 65 46 72 6f 6d 53 65 72 | 76 65 72 49 73 45 71 75 |eFromSer|verIsEqu|
|00003050| 61 6c 54 6f 43 6f 64 65 | 3a 20 40 22 32 35 30 22 |alToCode|: @"250"|
|00003060| 5d 20 29 0a 09 7b 0a 09 | 20 20 72 65 74 75 72 6e |] )..{..| return|
|00003070| 20 4e 4f 3b 0a 09 7d 0a | 20 20 20 20 7d 0a 20 20 | NO;..}.| }. |
|00003080| 65 6c 73 65 0a 20 20 20 | 20 7b 0a 20 20 20 20 20 |else. | {. |
|00003090| 20 72 65 74 75 72 6e 20 | 4e 4f 3b 0a 20 20 20 20 | return |NO;. |
|000030a0| 7d 0a 20 20 0a 20 20 72 | 65 74 75 72 6e 20 59 45 |}. . r|eturn YE|
|000030b0| 53 3b 0a 7d 0a 0a 0a 2f | 2f 0a 2f 2f 0a 2f 2f 0a |S;.}.../|/.//.//.|
|000030c0| 2d 20 28 42 4f 4f 4c 29 | 20 5f 77 72 69 74 65 52 |- (BOOL)| _writeR|
|000030d0| 65 63 69 70 69 65 6e 74 | 73 3a 20 28 4e 53 41 72 |ecipient|s: (NSAr|
|000030e0| 72 61 79 20 2a 29 20 72 | 65 63 69 70 69 65 6e 74 |ray *) r|ecipient|
|000030f0| 73 0a 09 75 73 69 6e 67 | 42 6f 75 6e 63 69 6e 67 |s..using|Bouncing|
|00003100| 4d 6f 64 65 3a 20 28 42 | 4f 4f 4c 29 20 61 42 4f |Mode: (B|OOL) aBO|
|00003110| 4f 4c 3b 0a 7b 0a 20 20 | 4e 53 45 6e 75 6d 65 72 |OL;.{. |NSEnumer|
|00003120| 61 74 6f 72 20 2a 72 65 | 63 69 70 69 65 6e 74 73 |ator *re|cipients|
|00003130| 45 6e 75 6d 65 72 61 74 | 6f 72 3b 0a 20 20 49 6e |Enumerat|or;. In|
|00003140| 74 65 72 6e 65 74 41 64 | 64 72 65 73 73 20 2a 74 |ternetAd|dress *t|
|00003150| 68 65 41 64 64 72 65 73 | 73 3b 0a 20 20 4e 53 53 |heAddres|s;. NSS|
|00003160| 74 72 69 6e 67 20 2a 61 | 53 74 72 69 6e 67 3b 0a |tring *a|String;.|
|00003170| 20 20 0a 20 20 72 65 63 | 69 70 69 65 6e 74 73 45 | . rec|ipientsE|
|00003180| 6e 75 6d 65 72 61 74 6f | 72 20 3d 20 5b 72 65 63 |numerato|r = [rec|
|00003190| 69 70 69 65 6e 74 73 20 | 6f 62 6a 65 63 74 45 6e |ipients |objectEn|
|000031a0| 75 6d 65 72 61 74 6f 72 | 5d 3b 0a 20 20 20 20 20 |umerator|];. |
|000031b0| 20 0a 20 20 2f 2f 20 57 | 65 20 76 65 72 69 66 79 | . // W|e verify|
|000031c0| 20 69 66 20 77 65 20 68 | 61 76 65 20 61 74 20 6c | if we h|ave at l|
|000031d0| 65 61 73 74 20 6f 6e 65 | 20 72 65 63 69 70 69 65 |east one| recipie|
|000031e0| 6e 74 0a 20 20 69 66 20 | 28 20 21 72 65 63 69 70 |nt. if |( !recip|
|000031f0| 69 65 6e 74 73 20 7c 7c | 20 5b 72 65 63 69 70 69 |ients ||| [recipi|
|00003200| 65 6e 74 73 20 63 6f 75 | 6e 74 5d 20 3d 3d 20 30 |ents cou|nt] == 0|
|00003210| 20 29 0a 20 20 20 20 7b | 0a 20 20 20 20 20 20 4e | ). {|. N|
|00003220| 53 44 65 62 75 67 4c 6f | 67 28 40 22 53 4d 54 50 |SDebugLo|g(@"SMTP|
|00003230| 3a 20 4e 6f 20 72 65 63 | 69 70 69 65 6e 74 73 20 |: No rec|ipients |
|00003240| 77 65 72 65 20 66 6f 75 | 6e 64 2c 20 61 62 6f 72 |were fou|nd, abor|
|00003250| 74 69 6e 67 2e 22 29 3b | 0a 20 20 20 20 20 20 72 |ting.");|. r|
|00003260| 65 74 75 72 6e 20 4e 4f | 3b 0a 20 20 20 20 7d 0a |eturn NO|;. }.|
|00003270| 20 20 0a 20 20 77 68 69 | 6c 65 20 28 20 28 74 68 | . whi|le ( (th|
|00003280| 65 41 64 64 72 65 73 73 | 20 3d 20 5b 72 65 63 69 |eAddress| = [reci|
|00003290| 70 69 65 6e 74 73 45 6e | 75 6d 65 72 61 74 6f 72 |pientsEn|umerator|
|000032a0| 20 6e 65 78 74 4f 62 6a | 65 63 74 5d 29 20 29 0a | nextObj|ect]) ).|
|000032b0| 20 20 20 20 7b 0a 20 20 | 20 20 20 20 2f 2f 20 49 | {. | // I|
|000032c0| 66 20 69 74 27 73 20 61 | 20 62 6f 75 6e 63 65 64 |f it's a| bounced|
|000032d0| 20 6d 65 73 73 61 67 65 | 2e 2e 2e 0a 20 20 20 20 | message|.... |
|000032e0| 20 20 69 66 20 28 20 61 | 42 4f 4f 4c 20 29 0a 09 | if ( a|BOOL )..|
|000032f0| 7b 0a 09 20 20 2f 2f 20 | 57 65 20 6f 6e 6c 79 20 |{.. // |We only |
|00003300| 67 65 74 20 74 68 65 20 | 62 6f 75 6e 63 65 64 20 |get the |bounced |
|00003310| 72 65 63 69 70 69 65 6e | 74 73 0a 09 20 20 69 66 |recipien|ts.. if|
|00003320| 20 28 20 5b 74 68 65 41 | 64 64 72 65 73 73 20 74 | ( [theA|ddress t|
|00003330| 79 70 65 5d 20 3e 20 33 | 20 29 0a 09 20 20 20 20 |ype] > 3| ).. |
|00003340| 7b 0a 09 20 20 20 20 20 | 20 61 53 74 72 69 6e 67 |{.. | aString|
|00003350| 20 3d 20 5b 4e 53 53 74 | 72 69 6e 67 20 73 74 72 | = [NSSt|ring str|
|00003360| 69 6e 67 57 69 74 68 46 | 6f 72 6d 61 74 3a 40 22 |ingWithF|ormat:@"|
|00003370| 52 43 50 54 20 54 4f 3a | 3c 25 40 3e 22 2c 20 5b |RCPT TO:|<%@>", [|
|00003380| 74 68 65 41 64 64 72 65 | 73 73 20 61 64 64 72 65 |theAddre|ss addre|
|00003390| 73 73 5d 5d 3b 0a 09 20 | 20 20 20 7d 0a 09 20 20 |ss]];.. | }.. |
|000033a0| 65 6c 73 65 0a 09 20 20 | 20 20 7b 0a 09 20 20 20 |else.. | {.. |
|000033b0| 20 20 20 61 53 74 72 69 | 6e 67 20 3d 20 6e 69 6c | aStri|ng = nil|
|000033c0| 3b 0a 09 20 20 20 20 7d | 0a 09 7d 0a 20 20 20 20 |;.. }|..}. |
|000033d0| 20 20 65 6c 73 65 0a 09 | 7b 0a 09 20 20 2f 2f 20 | else..|{.. // |
|000033e0| 4f 74 68 65 72 77 69 73 | 65 2c 20 77 65 20 67 65 |Otherwis|e, we ge|
|000033f0| 74 20 74 68 65 20 72 65 | 61 6c 20 72 65 63 69 70 |t the re|al recip|
|00003400| 69 65 6e 74 73 0a 09 20 | 20 69 66 20 28 20 5b 74 |ients.. | if ( [t|
|00003410| 68 65 41 64 64 72 65 73 | 73 20 74 79 70 65 5d 20 |heAddres|s type] |
|00003420| 3c 20 34 20 29 0a 09 20 | 20 20 20 7b 0a 09 20 20 |< 4 ).. | {.. |
|00003430| 20 20 20 20 61 53 74 72 | 69 6e 67 20 3d 20 5b 4e | aStr|ing = [N|
|00003440| 53 53 74 72 69 6e 67 20 | 73 74 72 69 6e 67 57 69 |SString |stringWi|
|00003450| 74 68 46 6f 72 6d 61 74 | 3a 40 22 52 43 50 54 20 |thFormat|:@"RCPT |
|00003460| 54 4f 3a 3c 25 40 3e 22 | 2c 20 5b 74 68 65 41 64 |TO:<%@>"|, [theAd|
|00003470| 64 72 65 73 73 20 61 64 | 64 72 65 73 73 5d 5d 3b |dress ad|dress]];|
|00003480| 0a 09 20 20 20 20 7d 0a | 09 20 20 65 6c 73 65 0a |.. }.|. else.|
|00003490| 09 20 20 20 20 7b 0a 09 | 20 20 20 20 20 20 61 53 |. {..| aS|
|000034a0| 74 72 69 6e 67 20 3d 20 | 6e 69 6c 3b 0a 09 20 20 |tring = |nil;.. |
|000034b0| 20 20 7d 0a 09 7d 0a 20 | 20 20 20 20 20 0a 20 20 | }..}. | . |
|000034c0| 20 20 20 20 2f 2f 20 49 | 66 20 77 65 20 68 61 76 | // I|f we hav|
|000034d0| 65 20 61 20 72 65 63 69 | 70 69 65 6e 74 20 74 6f |e a reci|pient to|
|000034e0| 20 77 72 69 74 65 2c 20 | 6c 65 74 27 73 20 77 72 | write, |let's wr|
|000034f0| 69 74 65 20 74 68 65 20 | 73 74 72 69 6e 67 20 74 |ite the |string t|
|00003500| 6f 20 74 68 65 20 73 6f | 63 6b 65 74 21 0a 20 20 |o the so|cket!. |
|00003510| 20 20 20 20 69 66 20 28 | 20 61 53 74 72 69 6e 67 | if (| aString|
|00003520| 20 29 0a 09 7b 0a 09 20 | 20 5b 5b 73 65 6c 66 20 | )..{.. | [[self |
|00003530| 74 63 70 43 6f 6e 6e 65 | 63 74 69 6f 6e 5d 20 77 |tcpConne|ction] w|
|00003540| 72 69 74 65 4c 69 6e 65 | 3a 20 61 53 74 72 69 6e |riteLine|: aStrin|
|00003550| 67 5d 3b 0a 09 20 20 0a | 09 20 20 2f 2f 20 57 65 |g];.. .|. // We|
|00003560| 20 76 65 72 69 66 79 20 | 69 66 20 74 68 65 20 73 | verify |if the s|
|00003570| 65 72 76 65 72 20 61 63 | 63 65 70 74 65 64 20 74 |erver ac|cepted t|
|00003580| 68 69 73 20 72 65 63 69 | 70 69 65 6e 74 2e 0a 09 |his reci|pient...|
|00003590| 20 20 69 66 20 28 20 21 | 5b 73 65 6c 66 20 5f 72 | if ( !|[self _r|
|000035a0| 65 73 70 6f 6e 73 65 46 | 72 6f 6d 53 65 72 76 65 |esponseF|romServe|
|000035b0| 72 49 73 45 71 75 61 6c | 54 6f 43 6f 64 65 3a 20 |rIsEqual|ToCode: |
|000035c0| 40 22 32 35 30 22 5d 20 | 29 0a 09 20 20 20 20 7b |@"250"] |).. {|
|000035d0| 0a 09 20 20 20 20 20 20 | 72 65 74 75 72 6e 20 4e |.. |return N|
|000035e0| 4f 3b 0a 09 20 20 20 20 | 7d 0a 09 7d 0a 20 20 20 |O;.. |}..}. |
|000035f0| 20 7d 20 2f 2f 20 77 68 | 69 6c 65 20 28 2e 2e 2e | } // wh|ile (...|
|00003600| 29 0a 0a 20 20 72 65 74 | 75 72 6e 20 59 45 53 3b |).. ret|urn YES;|
|00003610| 0a 7d 0a 0a 0a 2f 2f 0a | 2f 2f 0a 2f 2f 0a 2d 20 |.}...//.|//.//.- |
|00003620| 28 42 4f 4f 4c 29 20 5f | 77 72 69 74 65 4d 65 73 |(BOOL) _|writeMes|
|00003630| 73 61 67 65 46 72 6f 6d | 52 61 77 53 6f 75 72 63 |sageFrom|RawSourc|
|00003640| 65 3a 20 28 4e 53 44 61 | 74 61 20 2a 29 20 74 68 |e: (NSDa|ta *) th|
|00003650| 65 52 61 77 53 6f 75 72 | 63 65 0a 7b 20 20 20 20 |eRawSour|ce.{ |
|00003660| 0a 20 20 5b 5b 73 65 6c | 66 20 74 63 70 43 6f 6e |. [[sel|f tcpCon|
|00003670| 6e 65 63 74 69 6f 6e 5d | 20 77 72 69 74 65 4c 69 |nection]| writeLi|
|00003680| 6e 65 3a 20 40 22 44 41 | 54 41 22 5d 3b 0a 20 20 |ne: @"DA|TA"];. |
|00003690| 0a 20 20 69 66 20 28 20 | 21 5b 73 65 6c 66 20 5f |. if ( |![self _|
|000036a0| 72 65 73 70 6f 6e 73 65 | 46 72 6f 6d 53 65 72 76 |response|FromServ|
|000036b0| 65 72 49 73 45 71 75 61 | 6c 54 6f 43 6f 64 65 3a |erIsEqua|lToCode:|
|000036c0| 20 40 22 33 35 34 22 5d | 20 29 0a 20 20 20 20 7b | @"354"]| ). {|
|000036d0| 0a 20 20 20 20 20 20 4e | 53 44 65 62 75 67 4c 6f |. N|SDebugLo|
|000036e0| 67 28 40 22 53 4d 54 50 | 3a 20 61 6e 20 65 72 72 |g(@"SMTP|: an err|
|000036f0| 6f 72 20 6f 63 63 75 72 | 65 64 20 77 68 69 6c 65 |or occur|ed while|
|00003700| 20 77 72 69 74 69 6e 67 | 20 74 68 65 20 44 41 54 | writing| the DAT|
|00003710| 41 20 63 6f 6d 6d 61 6e | 64 2c 20 77 65 20 61 62 |A comman|d, we ab|
|00003720| 6f 72 74 2e 22 29 3b 0a | 20 20 20 20 20 20 72 65 |ort.");.| re|
|00003730| 74 75 72 6e 20 4e 4f 3b | 0a 20 20 20 20 7d 0a 20 |turn NO;|. }. |
|00003740| 20 0a 20 20 5b 5b 73 65 | 6c 66 20 74 63 70 43 6f | . [[se|lf tcpCo|
|00003750| 6e 6e 65 63 74 69 6f 6e | 5d 20 77 72 69 74 65 44 |nnection|] writeD|
|00003760| 61 74 61 3a 20 74 68 65 | 52 61 77 53 6f 75 72 63 |ata: the|RawSourc|
|00003770| 65 5d 3b 0a 20 20 5b 5b | 73 65 6c 66 20 74 63 70 |e];. [[|self tcp|
|00003780| 43 6f 6e 6e 65 63 74 69 | 6f 6e 5d 20 77 72 69 74 |Connecti|on] writ|
|00003790| 65 53 74 72 69 6e 67 3a | 20 40 22 5c 72 5c 6e 2e |eString:| @"\r\n.|
|000037a0| 5c 72 5c 6e 22 5d 3b 0a | 20 20 0a 20 20 72 65 74 |\r\n"];.| . ret|
|000037b0| 75 72 6e 20 59 45 53 3b | 0a 7d 0a 0a 0a 2f 2f 0a |urn YES;|.}...//.|
|000037c0| 2f 2f 20 50 4c 41 49 4e | 20 61 75 74 68 65 6e 74 |// PLAIN| authent|
|000037d0| 69 63 61 74 69 6f 6e 20 | 6d 65 63 68 61 6e 69 73 |ication |mechanis|
|000037e0| 6d 20 28 52 46 43 32 35 | 39 35 29 0a 2f 2f 0a 2d |m (RFC25|95).//.-|
|000037f0| 20 28 42 4f 4f 4c 29 20 | 5f 70 6c 61 69 6e 41 75 | (BOOL) |_plainAu|
|00003800| 74 68 65 6e 74 69 63 61 | 74 69 6f 6e 55 73 69 6e |thentica|tionUsin|
|00003810| 67 55 73 65 72 6e 61 6d | 65 3a 20 28 4e 53 53 74 |gUsernam|e: (NSSt|
|00003820| 72 69 6e 67 20 2a 29 20 | 74 68 65 55 73 65 72 6e |ring *) |theUsern|
|00003830| 61 6d 65 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |ame. | |
|00003840| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00003850| 20 20 20 20 20 20 70 61 | 73 73 77 6f 72 64 3a 20 | pa|ssword: |
|00003860| 28 4e 53 53 74 72 69 6e | 67 20 2a 29 20 74 68 65 |(NSStrin|g *) the|
|00003870| 50 61 73 73 77 6f 72 64 | 0a 7b 20 20 0a 20 20 5b |Password|.{ . [|
|00003880| 5b 73 65 6c 66 20 74 63 | 70 43 6f 6e 6e 65 63 74 |[self tc|pConnect|
|00003890| 69 6f 6e 5d 20 77 72 69 | 74 65 4c 69 6e 65 3a 20 |ion] wri|teLine: |
|000038a0| 40 22 41 55 54 48 20 50 | 4c 41 49 4e 22 5d 3b 0a |@"AUTH P|LAIN"];.|
|000038b0| 20 20 0a 20 20 69 66 20 | 28 20 5b 73 65 6c 66 20 | . if |( [self |
|000038c0| 5f 72 65 73 70 6f 6e 73 | 65 46 72 6f 6d 53 65 72 |_respons|eFromSer|
|000038d0| 76 65 72 49 73 45 71 75 | 61 6c 54 6f 43 6f 64 65 |verIsEqu|alToCode|
|000038e0| 3a 20 40 22 33 33 34 22 | 5d 20 29 0a 20 20 20 20 |: @"334"|] ). |
|000038f0| 7b 0a 20 20 20 20 20 20 | 4e 53 4d 75 74 61 62 6c |{. |NSMutabl|
|00003900| 65 44 61 74 61 20 2a 61 | 4d 75 74 61 62 6c 65 44 |eData *a|MutableD|
|00003910| 61 74 61 3b 0a 20 20 20 | 20 20 20 4e 53 53 74 72 |ata;. | NSStr|
|00003920| 69 6e 67 20 2a 61 53 74 | 72 69 6e 67 3b 0a 20 20 |ing *aSt|ring;. |
|00003930| 20 20 20 20 0a 20 20 20 | 20 20 20 69 6e 74 20 6c | . | int l|
|00003940| 65 6e 5f 75 73 65 72 6e | 61 6d 65 2c 20 6c 65 6e |en_usern|ame, len|
|00003950| 5f 70 61 73 73 77 6f 72 | 64 3b 0a 20 20 20 20 20 |_passwor|d;. |
|00003960| 20 0a 20 20 20 20 20 20 | 6c 65 6e 5f 75 73 65 72 | . |len_user|
|00003970| 6e 61 6d 65 20 3d 20 5b | 74 68 65 55 73 65 72 6e |name = [|theUsern|
|00003980| 61 6d 65 20 6c 65 6e 67 | 74 68 5d 3b 0a 20 20 0a |ame leng|th];. .|
|00003990| 20 20 20 20 20 20 69 66 | 20 28 20 21 74 68 65 50 | if| ( !theP|
|000039a0| 61 73 73 77 6f 72 64 20 | 29 0a 09 7b 0a 09 20 20 |assword |)..{.. |
|000039b0| 6c 65 6e 5f 70 61 73 73 | 77 6f 72 64 20 3d 20 30 |len_pass|word = 0|
|000039c0| 3b 0a 09 7d 0a 20 20 20 | 20 20 20 65 6c 73 65 0a |;..}. | else.|
|000039d0| 09 7b 0a 09 20 20 6c 65 | 6e 5f 70 61 73 73 77 6f |.{.. le|n_passwo|
|000039e0| 72 64 20 3d 20 5b 74 68 | 65 50 61 73 73 77 6f 72 |rd = [th|ePasswor|
|000039f0| 64 20 6c 65 6e 67 74 68 | 5d 3b 0a 09 7d 0a 20 20 |d length|];..}. |
|00003a00| 20 20 20 20 0a 20 20 20 | 20 20 20 2f 2f 20 57 65 | . | // We|
|00003a10| 20 63 72 65 61 74 65 20 | 6f 75 72 20 70 68 72 61 | create |our phra|
|00003a20| 73 65 0a 20 20 20 20 20 | 20 61 4d 75 74 61 62 6c |se. | aMutabl|
|00003a30| 65 44 61 74 61 20 3d 20 | 5b 4e 53 4d 75 74 61 62 |eData = |[NSMutab|
|00003a40| 6c 65 44 61 74 61 20 64 | 61 74 61 57 69 74 68 4c |leData d|ataWithL|
|00003a50| 65 6e 67 74 68 3a 20 28 | 6c 65 6e 5f 75 73 65 72 |ength: (|len_user|
|00003a60| 6e 61 6d 65 20 2b 20 6c | 65 6e 5f 70 61 73 73 77 |name + l|en_passw|
|00003a70| 6f 72 64 20 2b 20 32 29 | 5d 3b 0a 20 20 20 20 20 |ord + 2)|];. |
|00003a80| 20 0a 20 20 20 20 20 20 | 5b 61 4d 75 74 61 62 6c | . |[aMutabl|
|00003a90| 65 44 61 74 61 20 72 65 | 70 6c 61 63 65 42 79 74 |eData re|placeByt|
|00003aa0| 65 73 49 6e 52 61 6e 67 | 65 3a 20 4e 53 4d 61 6b |esInRang|e: NSMak|
|00003ab0| 65 52 61 6e 67 65 28 31 | 2c 6c 65 6e 5f 75 73 65 |eRange(1|,len_use|
|00003ac0| 72 6e 61 6d 65 29 0a 09 | 09 20 20 20 20 77 69 74 |rname)..|. wit|
|00003ad0| 68 42 79 74 65 73 3a 20 | 5b 5b 74 68 65 55 73 65 |hBytes: |[[theUse|
|00003ae0| 72 6e 61 6d 65 20 64 61 | 74 61 55 73 69 6e 67 45 |rname da|taUsingE|
|00003af0| 6e 63 6f 64 69 6e 67 3a | 20 4e 53 41 53 43 49 49 |ncoding:| NSASCII|
|00003b00| 53 74 72 69 6e 67 45 6e | 63 6f 64 69 6e 67 5d 20 |StringEn|coding] |
|00003b10| 62 79 74 65 73 5d 5d 3b | 0a 20 20 20 20 20 20 0a |bytes]];|. .|
|00003b20| 20 20 20 20 20 20 0a 20 | 20 20 20 20 20 5b 61 4d | . | [aM|
|00003b30| 75 74 61 62 6c 65 44 61 | 74 61 20 72 65 70 6c 61 |utableDa|ta repla|
|00003b40| 63 65 42 79 74 65 73 49 | 6e 52 61 6e 67 65 3a 20 |ceBytesI|nRange: |
|00003b50| 4e 53 4d 61 6b 65 52 61 | 6e 67 65 28 32 20 2b 20 |NSMakeRa|nge(2 + |
|00003b60| 6c 65 6e 5f 75 73 65 72 | 6e 61 6d 65 2c 20 6c 65 |len_user|name, le|
|00003b70| 6e 5f 70 61 73 73 77 6f | 72 64 29 0a 09 09 20 20 |n_passwo|rd)... |
|00003b80| 20 20 77 69 74 68 42 79 | 74 65 73 3a 20 5b 5b 74 | withBy|tes: [[t|
|00003b90| 68 65 50 61 73 73 77 6f | 72 64 20 64 61 74 61 55 |hePasswo|rd dataU|
|00003ba0| 73 69 6e 67 45 6e 63 6f | 64 69 6e 67 3a 20 4e 53 |singEnco|ding: NS|
|00003bb0| 41 53 43 49 49 53 74 72 | 69 6e 67 45 6e 63 6f 64 |ASCIIStr|ingEncod|
|00003bc0| 69 6e 67 5d 20 62 79 74 | 65 73 5d 5d 3b 0a 20 20 |ing] byt|es]];. |
|00003bd0| 20 20 20 20 0a 20 20 20 | 20 20 20 61 53 74 72 69 | . | aStri|
|00003be0| 6e 67 20 3d 20 5b 5b 4e | 53 53 74 72 69 6e 67 20 |ng = [[N|SString |
|00003bf0| 61 6c 6c 6f 63 5d 20 69 | 6e 69 74 57 69 74 68 44 |alloc] i|nitWithD|
|00003c00| 61 74 61 3a 20 5b 4d 69 | 6d 65 55 74 69 6c 69 74 |ata: [Mi|meUtilit|
|00003c10| 79 20 65 6e 63 6f 64 65 | 42 61 73 65 36 34 3a 20 |y encode|Base64: |
|00003c20| 61 4d 75 74 61 62 6c 65 | 44 61 74 61 0a 09 09 09 |aMutable|Data....|
|00003c30| 09 09 09 09 20 20 20 20 | 20 6c 69 6e 65 4c 65 6e |.... | lineLen|
|00003c40| 67 74 68 3a 20 30 5d 0a | 09 09 09 09 20 20 65 6e |gth: 0].|.... en|
|00003c50| 63 6f 64 69 6e 67 3a 20 | 4e 53 41 53 43 49 49 53 |coding: |NSASCIIS|
|00003c60| 74 72 69 6e 67 45 6e 63 | 6f 64 69 6e 67 5d 3b 0a |tringEnc|oding];.|
|00003c70| 20 20 20 20 20 20 0a 20 | 20 20 20 20 20 5b 5b 73 | . | [[s|
|00003c80| 65 6c 66 20 74 63 70 43 | 6f 6e 6e 65 63 74 69 6f |elf tcpC|onnectio|
|00003c90| 6e 5d 20 77 72 69 74 65 | 4c 69 6e 65 3a 20 61 53 |n] write|Line: aS|
|00003ca0| 74 72 69 6e 67 5d 3b 0a | 20 20 20 20 20 20 52 45 |tring];.| RE|
|00003cb0| 4c 45 41 53 45 28 61 53 | 74 72 69 6e 67 29 3b 0a |LEASE(aS|tring);.|
|00003cc0| 20 20 20 20 20 20 0a 20 | 20 20 20 20 20 69 66 20 | . | if |
|00003cd0| 28 20 5b 73 65 6c 66 20 | 5f 72 65 73 70 6f 6e 73 |( [self |_respons|
|00003ce0| 65 46 72 6f 6d 53 65 72 | 76 65 72 49 73 45 71 75 |eFromSer|verIsEqu|
|00003cf0| 61 6c 54 6f 43 6f 64 65 | 3a 20 40 22 32 33 35 22 |alToCode|: @"235"|
|00003d00| 5d 20 29 0a 09 7b 0a 09 | 20 20 4e 53 44 65 62 75 |] )..{..| NSDebu|
|00003d10| 67 4c 6f 67 28 40 22 50 | 4c 41 49 4e 20 41 75 74 |gLog(@"P|LAIN Aut|
|00003d20| 68 65 6e 74 69 63 61 74 | 69 6f 6e 20 73 75 63 63 |henticat|ion succ|
|00003d30| 65 73 73 66 75 6c 22 29 | 3b 0a 09 20 20 72 65 74 |essful")|;.. ret|
|00003d40| 75 72 6e 20 59 45 53 3b | 0a 09 7d 0a 20 20 20 20 |urn YES;|..}. |
|00003d50| 7d 0a 0a 20 20 72 65 74 | 75 72 6e 20 4e 4f 3b 0a |}.. ret|urn NO;.|
|00003d60| 7d 0a 0a 0a 2f 2f 0a 2f | 2f 20 4c 4f 47 49 4e 20 |}...//./|/ LOGIN |
|00003d70| 61 75 74 68 65 6e 74 69 | 63 61 74 69 6f 6e 20 6d |authenti|cation m|
|00003d80| 65 63 68 61 6e 69 73 6d | 20 28 75 6e 64 6f 63 75 |echanism| (undocu|
|00003d90| 6d 65 6e 74 65 64 20 62 | 75 74 20 65 61 73 79 20 |mented b|ut easy |
|00003da0| 74 6f 20 66 69 67 75 72 | 65 20 6f 75 74 29 0a 2f |to figur|e out)./|
|00003db0| 2f 0a 2d 20 28 42 4f 4f | 4c 29 20 5f 6c 6f 67 69 |/.- (BOO|L) _logi|
|00003dc0| 6e 41 75 74 68 65 6e 74 | 69 63 61 74 69 6f 6e 55 |nAuthent|icationU|
|00003dd0| 73 69 6e 67 55 73 65 72 | 6e 61 6d 65 3a 20 28 4e |singUser|name: (N|
|00003de0| 53 53 74 72 69 6e 67 20 | 2a 29 20 74 68 65 55 73 |SString |*) theUs|
|00003df0| 65 72 6e 61 6d 65 0a 20 | 20 20 20 20 20 20 20 20 |ername. | |
|00003e00| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00003e10| 20 20 20 20 20 20 20 20 | 20 70 61 73 73 77 6f 72 | | passwor|
|00003e20| 64 3a 20 28 4e 53 53 74 | 72 69 6e 67 20 2a 29 20 |d: (NSSt|ring *) |
|00003e30| 74 68 65 50 61 73 73 77 | 6f 72 64 0a 7b 0a 20 20 |thePassw|ord.{. |
|00003e40| 4e 53 53 74 72 69 6e 67 | 20 2a 61 53 74 72 69 6e |NSString| *aStrin|
|00003e50| 67 3b 0a 20 20 0a 20 20 | 5b 5b 73 65 6c 66 20 74 |g;. . |[[self t|
|00003e60| 63 70 43 6f 6e 6e 65 63 | 74 69 6f 6e 5d 20 77 72 |cpConnec|tion] wr|
|00003e70| 69 74 65 4c 69 6e 65 3a | 20 40 22 41 55 54 48 20 |iteLine:| @"AUTH |
|00003e80| 4c 4f 47 49 4e 22 5d 3b | 0a 0a 20 20 61 53 74 72 |LOGIN"];|.. aStr|
|00003e90| 69 6e 67 20 3d 20 5b 5b | 73 65 6c 66 20 74 63 70 |ing = [[|self tcp|
|00003ea0| 43 6f 6e 6e 65 63 74 69 | 6f 6e 5d 20 72 65 61 64 |Connecti|on] read|
|00003eb0| 4c 69 6e 65 5d 3b 0a 20 | 0a 20 20 69 66 20 28 20 |Line];. |. if ( |
|00003ec0| 5b 61 53 74 72 69 6e 67 | 20 68 61 73 50 72 65 66 |[aString| hasPref|
|00003ed0| 69 78 3a 20 40 22 33 33 | 34 22 5d 20 29 0a 20 20 |ix: @"33|4"] ). |
|00003ee0| 20 20 7b 0a 20 20 20 20 | 20 20 4e 53 53 74 72 69 | {. | NSStri|
|00003ef0| 6e 67 20 2a 75 6e 2c 20 | 2a 70 77 3b 0a 0a 20 20 |ng *un, |*pw;.. |
|00003f00| 20 20 20 20 75 6e 20 3d | 20 5b 5b 4e 53 53 74 72 | un =| [[NSStr|
|00003f10| 69 6e 67 20 61 6c 6c 6f | 63 5d 20 69 6e 69 74 57 |ing allo|c] initW|
|00003f20| 69 74 68 44 61 74 61 3a | 20 5b 4d 69 6d 65 55 74 |ithData:| [MimeUt|
|00003f30| 69 6c 69 74 79 20 65 6e | 63 6f 64 65 42 61 73 65 |ility en|codeBase|
|00003f40| 36 34 3a 20 5b 74 68 65 | 55 73 65 72 6e 61 6d 65 |64: [the|Username|
|00003f50| 20 64 61 74 61 55 73 69 | 6e 67 45 6e 63 6f 64 69 | dataUsi|ngEncodi|
|00003f60| 6e 67 3a 20 4e 53 41 53 | 43 49 49 53 74 72 69 6e |ng: NSAS|CIIStrin|
|00003f70| 67 45 6e 63 6f 64 69 6e | 67 5d 0a 09 09 09 09 09 |gEncodin|g]......|
|00003f80| 09 09 6c 69 6e 65 4c 65 | 6e 67 74 68 3a 20 30 5d |..lineLe|ngth: 0]|
|00003f90| 0a 09 09 09 20 20 20 20 | 20 65 6e 63 6f 64 69 6e |.... | encodin|
|00003fa0| 67 3a 20 4e 53 41 53 43 | 49 49 53 74 72 69 6e 67 |g: NSASC|IIString|
|00003fb0| 45 6e 63 6f 64 69 6e 67 | 5d 3b 0a 20 20 20 20 20 |Encoding|];. |
|00003fc0| 20 0a 20 20 20 20 20 20 | 5b 5b 73 65 6c 66 20 74 | . |[[self t|
|00003fd0| 63 70 43 6f 6e 6e 65 63 | 74 69 6f 6e 5d 20 77 72 |cpConnec|tion] wr|
|00003fe0| 69 74 65 4c 69 6e 65 3a | 20 75 6e 5d 3b 0a 20 20 |iteLine:| un];. |
|00003ff0| 20 20 20 20 52 45 4c 45 | 41 53 45 28 75 6e 29 3b | RELE|ASE(un);|
|00004000| 0a 20 20 20 20 20 20 0a | 20 20 20 20 20 20 61 53 |. .| aS|
|00004010| 74 72 69 6e 67 20 3d 20 | 5b 5b 73 65 6c 66 20 74 |tring = |[[self t|
|00004020| 63 70 43 6f 6e 6e 65 63 | 74 69 6f 6e 5d 20 72 65 |cpConnec|tion] re|
|00004030| 61 64 4c 69 6e 65 5d 3b | 0a 0a 20 20 20 20 20 20 |adLine];|.. |
|00004040| 69 66 20 28 20 5b 61 53 | 74 72 69 6e 67 20 68 61 |if ( [aS|tring ha|
|00004050| 73 50 72 65 66 69 78 3a | 20 40 22 33 33 34 22 5d |sPrefix:| @"334"]|
|00004060| 20 29 0a 09 7b 0a 09 20 | 20 70 77 20 3d 20 5b 5b | )..{.. | pw = [[|
|00004070| 4e 53 53 74 72 69 6e 67 | 20 61 6c 6c 6f 63 5d 20 |NSString| alloc] |
|00004080| 69 6e 69 74 57 69 74 68 | 44 61 74 61 3a 20 5b 4d |initWith|Data: [M|
|00004090| 69 6d 65 55 74 69 6c 69 | 74 79 20 65 6e 63 6f 64 |imeUtili|ty encod|
|000040a0| 65 42 61 73 65 36 34 3a | 20 5b 74 68 65 50 61 73 |eBase64:| [thePas|
|000040b0| 73 77 6f 72 64 20 64 61 | 74 61 55 73 69 6e 67 45 |sword da|taUsingE|
|000040c0| 6e 63 6f 64 69 6e 67 3a | 20 4e 53 41 53 43 49 49 |ncoding:| NSASCII|
|000040d0| 53 74 72 69 6e 67 45 6e | 63 6f 64 69 6e 67 5d 0a |StringEn|coding].|
|000040e0| 09 09 09 09 09 09 09 20 | 20 20 20 6c 69 6e 65 4c |....... | lineL|
|000040f0| 65 6e 67 74 68 3a 20 30 | 5d 0a 09 09 09 09 20 65 |ength: 0|]..... e|
|00004100| 6e 63 6f 64 69 6e 67 3a | 20 4e 53 41 53 43 49 49 |ncoding:| NSASCII|
|00004110| 53 74 72 69 6e 67 45 6e | 63 6f 64 69 6e 67 5d 3b |StringEn|coding];|
|00004120| 0a 09 20 20 0a 09 20 20 | 5b 5b 73 65 6c 66 20 74 |.. .. |[[self t|
|00004130| 63 70 43 6f 6e 6e 65 63 | 74 69 6f 6e 5d 20 77 72 |cpConnec|tion] wr|
|00004140| 69 74 65 4c 69 6e 65 3a | 20 70 77 5d 3b 0a 09 20 |iteLine:| pw];.. |
|00004150| 20 52 45 4c 45 41 53 45 | 28 70 77 29 3b 0a 09 20 | RELEASE|(pw);.. |
|00004160| 20 0a 09 20 20 69 66 20 | 28 20 5b 73 65 6c 66 20 | .. if |( [self |
|00004170| 5f 72 65 73 70 6f 6e 73 | 65 46 72 6f 6d 53 65 72 |_respons|eFromSer|
|00004180| 76 65 72 49 73 45 71 75 | 61 6c 54 6f 43 6f 64 65 |verIsEqu|alToCode|
|00004190| 3a 20 40 22 32 33 35 22 | 5d 20 29 0a 09 20 20 20 |: @"235"|] ).. |
|000041a0| 20 7b 0a 09 20 20 20 20 | 20 20 4e 53 44 65 62 75 | {.. | NSDebu|
|000041b0| 67 4c 6f 67 28 40 22 4c | 4f 47 49 4e 20 41 75 74 |gLog(@"L|OGIN Aut|
|000041c0| 68 65 6e 74 69 63 61 74 | 69 6f 6e 20 73 75 63 63 |henticat|ion succ|
|000041d0| 65 73 73 66 75 6c 22 29 | 3b 0a 09 20 20 20 20 20 |essful")|;.. |
|000041e0| 20 72 65 74 75 72 6e 20 | 59 45 53 3b 0a 09 20 20 | return |YES;.. |
|000041f0| 20 20 7d 0a 09 7d 0a 20 | 20 20 20 7d 0a 20 20 0a | }..}. | }. .|
|00004200| 20 20 72 65 74 75 72 6e | 20 4e 4f 3b 0a 7d 0a 0a | return| NO;.}..|
|00004210| 0a 2f 2f 0a 2f 2f 20 43 | 52 41 4d 2d 4d 44 35 20 |.//.// C|RAM-MD5 |
|00004220| 61 75 74 68 65 6e 74 69 | 63 61 74 69 6f 6e 20 6d |authenti|cation m|
|00004230| 65 63 68 61 6e 69 73 6d | 20 28 32 31 39 35 29 0a |echanism| (2195).|
|00004240| 2f 2f 0a 2d 20 28 42 4f | 4f 4c 29 20 5f 63 72 61 |//.- (BO|OL) _cra|
|00004250| 6d 4d 44 35 41 75 74 68 | 65 6e 74 69 63 61 74 69 |mMD5Auth|enticati|
|00004260| 6f 6e 55 73 69 6e 67 55 | 73 65 72 6e 61 6d 65 3a |onUsingU|sername:|
|00004270| 20 28 4e 53 53 74 72 69 | 6e 67 20 2a 29 20 74 68 | (NSStri|ng *) th|
|00004280| 65 55 73 65 72 6e 61 6d | 65 0a 20 20 20 20 20 20 |eUsernam|e. |
|00004290| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000042a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 70 61 | | pa|
|000042b0| 73 73 77 6f 72 64 3a 20 | 28 4e 53 53 74 72 69 6e |ssword: |(NSStrin|
|000042c0| 67 20 2a 29 20 74 68 65 | 50 61 73 73 77 6f 72 64 |g *) the|Password|
|000042d0| 0a 7b 0a 20 20 4e 53 53 | 74 72 69 6e 67 20 2a 61 |.{. NSS|tring *a|
|000042e0| 53 74 72 69 6e 67 3b 0a | 20 20 0a 20 20 5b 5b 73 |String;.| . [[s|
|000042f0| 65 6c 66 20 74 63 70 43 | 6f 6e 6e 65 63 74 69 6f |elf tcpC|onnectio|
|00004300| 6e 5d 20 77 72 69 74 65 | 4c 69 6e 65 3a 20 40 22 |n] write|Line: @"|
|00004310| 41 55 54 48 20 43 52 41 | 4d 2d 4d 44 35 22 5d 3b |AUTH CRA|M-MD5"];|
|00004320| 0a 20 20 0a 20 20 61 53 | 74 72 69 6e 67 20 3d 20 |. . aS|tring = |
|00004330| 5b 5b 73 65 6c 66 20 74 | 63 70 43 6f 6e 6e 65 63 |[[self t|cpConnec|
|00004340| 74 69 6f 6e 5d 20 72 65 | 61 64 4c 69 6e 65 5d 3b |tion] re|adLine];|
|00004350| 0a 20 20 0a 20 20 69 66 | 20 28 20 5b 61 53 74 72 |. . if| ( [aStr|
|00004360| 69 6e 67 20 68 61 73 50 | 72 65 66 69 78 3a 20 40 |ing hasP|refix: @|
|00004370| 22 33 33 34 22 5d 20 29 | 0a 20 20 20 20 7b 0a 20 |"334"] )|. {. |
|00004380| 20 20 20 20 20 47 53 4d | 44 35 20 2a 6d 64 35 3b | GSM|D5 *md5;|
|00004390| 0a 20 20 20 20 20 20 0a | 20 20 20 20 20 20 2f 2f |. .| //|
|000043a0| 20 57 65 20 74 72 69 6d | 20 74 68 65 20 22 33 33 | We trim| the "33|
|000043b0| 34 20 22 20 61 6e 64 20 | 77 65 20 6b 65 65 70 20 |4 " and |we keep |
|000043c0| 74 68 65 20 63 68 61 6c | 6c 65 6e 67 65 20 70 68 |the chal|lenge ph|
|000043d0| 72 61 73 65 0a 20 20 20 | 20 20 20 61 53 74 72 69 |rase. | aStri|
|000043e0| 6e 67 20 3d 20 5b 61 53 | 74 72 69 6e 67 20 73 75 |ng = [aS|tring su|
|000043f0| 62 73 74 72 69 6e 67 46 | 72 6f 6d 49 6e 64 65 78 |bstringF|romIndex|
|00004400| 3a 20 34 5d 3b 0a 20 20 | 20 20 20 20 0a 20 20 20 |: 4];. | . |
|00004410| 20 20 20 2f 2f 20 57 65 | 20 74 72 69 6d 20 6f 75 | // We| trim ou|
|00004420| 72 20 5c 72 5c 6e 0a 20 | 20 20 20 20 20 61 53 74 |r \r\n. | aSt|
|00004430| 72 69 6e 67 20 3d 20 5b | 61 53 74 72 69 6e 67 20 |ring = [|aString |
|00004440| 73 75 62 73 74 72 69 6e | 67 54 6f 49 6e 64 65 78 |substrin|gToIndex|
|00004450| 3a 20 28 5b 61 53 74 72 | 69 6e 67 20 6c 65 6e 67 |: ([aStr|ing leng|
|00004460| 74 68 5d 20 2d 20 32 29 | 5d 3b 0a 20 20 20 20 20 |th] - 2)|];. |
|00004470| 20 0a 20 20 20 20 20 20 | 61 53 74 72 69 6e 67 20 | . |aString |
|00004480| 3d 20 5b 5b 4e 53 53 74 | 72 69 6e 67 20 61 6c 6c |= [[NSSt|ring all|
|00004490| 6f 63 5d 20 69 6e 69 74 | 57 69 74 68 44 61 74 61 |oc] init|WithData|
|000044a0| 3a 20 5b 4d 69 6d 65 55 | 74 69 6c 69 74 79 20 64 |: [MimeU|tility d|
|000044b0| 65 63 6f 64 65 42 61 73 | 65 36 34 3a 20 5b 61 53 |ecodeBas|e64: [aS|
|000044c0| 74 72 69 6e 67 20 64 61 | 74 61 55 73 69 6e 67 45 |tring da|taUsingE|
|000044d0| 6e 63 6f 64 69 6e 67 3a | 20 4e 53 41 53 43 49 49 |ncoding:| NSASCII|
|000044e0| 53 74 72 69 6e 67 45 6e | 63 6f 64 69 6e 67 5d 5d |StringEn|coding]]|
|000044f0| 0a 20 20 20 20 09 09 09 | 09 20 20 65 6e 63 6f 64 |. ...|. encod|
|00004500| 69 6e 67 3a 20 4e 53 41 | 53 43 49 49 53 74 72 69 |ing: NSA|SCIIStri|
|00004510| 6e 67 45 6e 63 6f 64 69 | 6e 67 5d 3b 3b 0a 20 20 |ngEncodi|ng];;. |
|00004520| 20 20 20 20 0a 20 20 20 | 20 20 20 0a 20 20 20 20 | . | . |
|00004530| 20 20 6d 64 35 20 3d 20 | 5b 5b 47 53 4d 44 35 20 | md5 = |[[GSMD5 |
|00004540| 61 6c 6c 6f 63 5d 20 69 | 6e 69 74 5d 3b 0a 20 20 |alloc] i|nit];. |
|00004550| 20 20 20 20 5b 6d 64 35 | 20 75 70 64 61 74 65 57 | [md5| updateW|
|00004560| 69 74 68 53 74 72 69 6e | 67 3a 20 5b 4e 53 53 74 |ithStrin|g: [NSSt|
|00004570| 72 69 6e 67 20 73 74 72 | 69 6e 67 57 69 74 68 46 |ring str|ingWithF|
|00004580| 6f 72 6d 61 74 3a 20 40 | 22 25 40 25 40 22 2c 20 |ormat: @|"%@%@", |
|00004590| 74 68 65 50 61 73 73 77 | 6f 72 64 2c 20 61 53 74 |thePassw|ord, aSt|
|000045a0| 72 69 6e 67 5d 0a 20 20 | 20 20 09 20 20 20 75 73 |ring]. | . us|
|000045b0| 69 6e 67 45 6e 63 6f 64 | 69 6e 67 3a 20 4e 53 41 |ingEncod|ing: NSA|
|000045c0| 53 43 49 49 53 74 72 69 | 6e 67 45 6e 63 6f 64 69 |SCIIStri|ngEncodi|
|000045d0| 6e 67 5d 3b 0a 20 20 20 | 20 20 20 5b 6d 64 35 20 |ng];. | [md5 |
|000045e0| 63 61 6c 63 75 6c 61 74 | 65 44 69 67 65 73 74 5d |calculat|eDigest]|
|000045f0| 3b 0a 20 20 20 20 20 20 | 52 45 4c 45 41 53 45 28 |;. |RELEASE(|
|00004600| 61 53 74 72 69 6e 67 29 | 3b 0a 20 20 20 20 20 20 |aString)|;. |
|00004610| 0a 20 20 20 20 20 20 61 | 53 74 72 69 6e 67 20 3d |. a|String =|
|00004620| 20 44 61 74 61 54 6f 48 | 65 78 53 74 72 69 6e 67 | DataToH|exString|
|00004630| 28 20 5b 6d 64 35 20 64 | 69 67 65 73 74 5d 20 29 |( [md5 d|igest] )|
|00004640| 3b 20 0a 20 20 20 20 20 | 20 61 53 74 72 69 6e 67 |; . | aString|
|00004650| 20 3d 20 5b 5b 4e 53 53 | 74 72 69 6e 67 20 61 6c | = [[NSS|tring al|
|00004660| 6c 6f 63 5d 20 69 6e 69 | 74 57 69 74 68 44 61 74 |loc] ini|tWithDat|
|00004670| 61 3a 20 5b 4d 69 6d 65 | 55 74 69 6c 69 74 79 20 |a: [Mime|Utility |
|00004680| 65 6e 63 6f 64 65 42 61 | 73 65 36 34 3a 20 5b 61 |encodeBa|se64: [a|
|00004690| 53 74 72 69 6e 67 20 64 | 61 74 61 55 73 69 6e 67 |String d|ataUsing|
|000046a0| 45 6e 63 6f 64 69 6e 67 | 3a 20 4e 53 41 53 43 49 |Encoding|: NSASCI|
|000046b0| 49 53 74 72 69 6e 67 45 | 6e 63 6f 64 69 6e 67 5d |IStringE|ncoding]|
|000046c0| 0a 20 20 20 20 09 09 09 | 09 09 09 09 20 20 20 20 |. ...|.... |
|000046d0| 20 6c 69 6e 65 4c 65 6e | 67 74 68 3a 20 30 5d 0a | lineLen|gth: 0].|
|000046e0| 20 20 20 20 09 09 09 09 | 20 20 65 6e 63 6f 64 69 | ....| encodi|
|000046f0| 6e 67 3a 20 4e 53 41 53 | 43 49 49 53 74 72 69 6e |ng: NSAS|CIIStrin|
|00004700| 67 45 6e 63 6f 64 69 6e | 67 5d 3b 0a 20 20 20 20 |gEncodin|g];. |
|00004710| 20 20 52 45 4c 45 41 53 | 45 28 6d 64 35 29 3b 0a | RELEAS|E(md5);.|
|00004720| 20 20 20 20 20 20 0a 20 | 20 20 20 20 20 5b 5b 73 | . | [[s|
|00004730| 65 6c 66 20 74 63 70 43 | 6f 6e 6e 65 63 74 69 6f |elf tcpC|onnectio|
|00004740| 6e 5d 20 77 72 69 74 65 | 4c 69 6e 65 3a 20 61 53 |n] write|Line: aS|
|00004750| 74 72 69 6e 67 5d 3b 0a | 20 20 20 20 20 20 52 45 |tring];.| RE|
|00004760| 4c 45 41 53 45 28 61 53 | 74 72 69 6e 67 29 3b 0a |LEASE(aS|tring);.|
|00004770| 20 20 20 20 20 20 0a 20 | 20 20 20 20 20 69 66 20 | . | if |
|00004780| 28 20 5b 73 65 6c 66 20 | 5f 72 65 73 70 6f 6e 73 |( [self |_respons|
|00004790| 65 46 72 6f 6d 53 65 72 | 76 65 72 49 73 45 71 75 |eFromSer|verIsEqu|
|000047a0| 61 6c 54 6f 43 6f 64 65 | 3a 20 40 22 32 33 35 22 |alToCode|: @"235"|
|000047b0| 5d 20 29 0a 09 7b 0a 09 | 20 20 4e 53 44 65 62 75 |] )..{..| NSDebu|
|000047c0| 67 4c 6f 67 28 40 22 43 | 52 41 4d 2d 4d 44 35 20 |gLog(@"C|RAM-MD5 |
|000047d0| 41 75 74 68 65 6e 74 69 | 63 61 74 69 6f 6e 20 73 |Authenti|cation s|
|000047e0| 75 63 63 65 73 73 66 75 | 6c 22 29 3b 0a 09 20 20 |uccessfu|l");.. |
|000047f0| 72 65 74 75 72 6e 20 59 | 45 53 3b 0a 09 7d 0a 20 |return Y|ES;..}. |
|00004800| 20 20 20 7d 0a 0a 20 20 | 72 65 74 75 72 6e 20 4e | }.. |return N|
|00004810| 4f 3b 0a 7d 0a 0a 40 65 | 6e 64 0a 0a 0a 2f 2f 0a |O;.}..@e|nd...//.|
|00004820| 2f 2f 20 53 4d 54 50 52 | 65 73 70 6f 6e 73 65 20 |// SMTPR|esponse |
|00004830| 69 6d 70 6c 65 6d 65 6e | 74 61 74 69 6f 6e 0a 2f |implemen|tation./|
|00004840| 2f 0a 40 69 6d 70 6c 65 | 6d 65 6e 74 61 74 69 6f |/.@imple|mentatio|
|00004850| 6e 20 53 4d 54 50 52 65 | 73 70 6f 6e 73 65 4c 69 |n SMTPRe|sponseLi|
|00004860| 6e 65 73 0a 0a 2d 20 28 | 69 64 29 20 69 6e 69 74 |nes..- (|id) init|
|00004870| 0a 7b 0a 20 20 6c 69 6e | 65 73 20 3d 20 5b 5b 4e |.{. lin|es = [[N|
|00004880| 53 4d 75 74 61 62 6c 65 | 41 72 72 61 79 20 61 6c |SMutable|Array al|
|00004890| 6c 6f 63 5d 20 69 6e 69 | 74 5d 3b 0a 0a 20 20 69 |loc] ini|t];.. i|
|000048a0| 66 20 28 20 21 6c 69 6e | 65 73 20 29 0a 20 20 20 |f ( !lin|es ). |
|000048b0| 20 7b 0a 20 20 20 20 20 | 20 41 55 54 4f 52 45 4c | {. | AUTOREL|
|000048c0| 45 41 53 45 28 73 65 6c | 66 29 3b 0a 20 20 20 20 |EASE(sel|f);. |
|000048d0| 20 20 72 65 74 75 72 6e | 20 6e 69 6c 3b 0a 20 20 | return| nil;. |
|000048e0| 20 20 7d 0a 0a 20 20 72 | 65 74 75 72 6e 20 73 65 | }.. r|eturn se|
|000048f0| 6c 66 3b 0a 7d 0a 0a 2d | 20 28 76 6f 69 64 29 20 |lf;.}..-| (void) |
|00004900| 61 64 64 4c 69 6e 65 3a | 20 28 4e 53 53 74 72 69 |addLine:| (NSStri|
|00004910| 6e 67 20 2a 29 20 74 68 | 65 4c 69 6e 65 0a 7b 0a |ng *) th|eLine.{.|
|00004920| 20 20 5b 6c 69 6e 65 73 | 20 61 64 64 4f 62 6a 65 | [lines| addObje|
|00004930| 63 74 3a 20 74 68 65 4c | 69 6e 65 5d 3b 0a 7d 0a |ct: theL|ine];.}.|
|00004940| 0a 2d 20 28 75 6e 73 69 | 67 6e 65 64 20 69 6e 74 |.- (unsi|gned int|
|00004950| 29 20 63 6f 75 6e 74 0a | 7b 0a 20 20 72 65 74 75 |) count.|{. retu|
|00004960| 72 6e 20 5b 6c 69 6e 65 | 73 20 63 6f 75 6e 74 5d |rn [line|s count]|
|00004970| 3b 0a 7d 0a 0a 2d 20 28 | 4e 53 53 74 72 69 6e 67 |;.}..- (|NSString|
|00004980| 20 2a 29 20 6c 69 6e 65 | 41 74 49 6e 64 65 78 3a | *) line|AtIndex:|
|00004990| 20 28 75 6e 73 69 67 6e | 65 64 20 69 6e 74 29 20 | (unsign|ed int) |
|000049a0| 74 68 65 49 6e 64 65 78 | 0a 7b 0a 20 20 72 65 74 |theIndex|.{. ret|
|000049b0| 75 72 6e 20 5b 6c 69 6e | 65 73 20 6f 62 6a 65 63 |urn [lin|es objec|
|000049c0| 74 41 74 49 6e 64 65 78 | 3a 20 74 68 65 49 6e 64 |tAtIndex|: theInd|
|000049d0| 65 78 5d 3b 0a 7d 0a 0a | 2d 20 28 76 6f 69 64 29 |ex];.}..|- (void)|
|000049e0| 20 64 65 61 6c 6c 6f 63 | 0a 7b 0a 20 20 52 45 4c | dealloc|.{. REL|
|000049f0| 45 41 53 45 28 6c 69 6e | 65 73 29 3b 0a 20 20 0a |EASE(lin|es);. .|
|00004a00| 20 20 5b 73 75 70 65 72 | 20 64 65 61 6c 6c 6f 63 | [super| dealloc|
|00004a10| 5d 3b 0a 7d 0a 0a 40 65 | 6e 64 0a 00 00 00 00 00 |];.}..@e|nd......|
|00004a20| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004a30| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004a40| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004a50| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004a60| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004a70| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004a80| 00 00 01 00 00 00 01 00 | 00 00 00 00 00 00 00 1e |........|........|
|00004a90| 54 68 69 73 20 72 65 73 | 6f 75 72 63 65 20 66 6f |This res|ource fo|
|00004aa0| 72 6b 20 69 6e 74 65 6e | 74 69 6f 6e 61 6c 6c 79 |rk inten|tionally|
|00004ab0| 20 6c 65 66 74 20 62 6c | 61 6e 6b 20 20 20 00 00 | left bl|ank ..|
|00004ac0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004ad0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004ae0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004af0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b00| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b10| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b20| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b30| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b40| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b50| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b60| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b70| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004b80| 00 00 01 00 00 00 01 00 | 00 00 00 00 00 00 00 1e |........|........|
|00004b90| 00 00 00 00 00 00 00 00 | 00 1c 00 1e ff ff 00 00 |........|........|
|00004ba0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004bb0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004bc0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004bd0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004be0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004bf0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
+--------+-------------------------+-------------------------+--------+--------+